动态Linq和未知数的替换值?

Mor*_*ker 1 .net c# linq dynamic-data

通常,带字符串的动态linq查询可以使用替换值,例如:

result =
    db.Persons.Where("Name == @1", "John");
Run Code Online (Sandbox Code Playgroud)

我有一个未知数量的字符串,我想传递给该Where子句.我没有整数问题,但API似乎无法处理没有替换值的字符串.

有没有人知道这方面的方法?我为我的Where语句创建了一个连接字符串,所以我可以添加"@ 1"或其他什么,但我不能添加参数,Where()所以我被卡住了.

谢谢!

Tho*_*que 6

我为where语句创建了一个连接字符串,所以我可以添加"@ 1"或者其他什么,但我不能将参数添加到Where(),所以我被卡住了.

是的你可以.该Where方法的第二个参数是params object[] values,所以你只需要传递一个对象数组.

例如,假设您在字典中具有属性名称和值,则可以执行以下操作:

var dic = new Dictionary<string, object>
{
    { "Name", "John" },
    { "Age", 30 },
    { "City", "New York" }
};

...

var conditions = dic.Keys.Select(
    (key, idx) =>
        string.Format("{0} == @{1}", key, idx));
string predicate = string.Join(" And ", conditions);
object[] values = dic.Values.ToArray();
result = db.Persons.Where(predicate, values);
Run Code Online (Sandbox Code Playgroud)