C# 具有未知数字的动态Linq和替换值?

C# 具有未知数字的动态Linq和替换值?,c#,.net,linq,dynamic-data,C#,.net,Linq,Dynamic Data,通常,带有字符串的动态linq查询可以使用替换值,例如: result = db.Persons.Where("Name == @1", "John"); 我想要传递到Where子句中的字符串数目未知。我对整数没有问题,但是API似乎无法处理没有替换值的字符串 有人知道怎么解决这个问题吗?我为Where语句创建了一个连接字符串,因此我可以添加@1或其他内容,但我无法向Where语句添加参数,因此我被卡住了。谢谢 我想我能理解你关于字符串替换问题的意思 这里有两个可供探索的备选方案。托马

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

result =
    db.Persons.Where("Name == @1", "John");
我想要传递到Where子句中的字符串数目未知。我对整数没有问题,但是API似乎无法处理没有替换值的字符串


有人知道怎么解决这个问题吗?我为Where语句创建了一个连接字符串,因此我可以添加@1或其他内容,但我无法向Where语句添加参数,因此我被卡住了。谢谢

我想我能理解你关于字符串替换问题的意思

这里有两个可供探索的备选方案。托马斯·佩特里切克(Thomas Petricek)的解决方案(如果你能遵循的话)特别有趣:

在C中运行时构建[Dynamic]LINQ查询

使用PredicateBuilder动态组合表达式谓词


另请参见

我想我可以理解您关于字符串替换问题的意思

这里有两个可供探索的备选方案。托马斯·佩特里切克(Thomas Petricek)的解决方案(如果你能遵循的话)特别有趣:

在C中运行时构建[Dynamic]LINQ查询

使用PredicateBuilder动态组合表达式谓词

另见

我为where语句创建了一个连接字符串,这样我就可以添加@1或任何东西,但是我不能向where语句添加参数,所以我被卡住了

是的,你可以。Where方法的第二个参数是params object[]value,因此您只需要传递一个对象数组

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

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);
我为where语句创建了一个连接字符串,这样我就可以添加@1或任何东西,但是我不能向where语句添加参数,所以我被卡住了

是的,你可以。Where方法的第二个参数是params object[]value,因此您只需要传递一个对象数组

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

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);

我为这个做了些东西。使用David Fowlers DynamicIQ项目和PredicateBuilder,您可以从通用IQueryable构建谓词并构建它们。特别感谢一些StackOverflow的回答,它给了我这一行的转换

Func<dynamic, dynamic>

to:

Expression<Func<T, bool>>

完整的总结和完整的演示都在源代码中,我已经为此做了一些准备。使用David Fowlers DynamicIQ项目和PredicateBuilder,您可以从通用IQueryable构建谓词并构建它们。特别感谢一些StackOverflow的回答,它给了我这一行的转换

Func<dynamic, dynamic>

to:

Expression<Func<T, bool>>

完整的总结和完整的演示都在源代码中

认真吗?在2011年,这是获得or'd状态的最好方法?哦,天哪,至少阿尔巴哈里看起来是可以理解的。我想现在肯定会有比这更好的。真的吗?在2011年,这是获得or'd状态的最好方法?哦,天哪,至少阿尔巴哈里看起来是可以理解的。我想现在肯定会有比这更好的东西。