C# 具有未知数字的动态Linq和替换值?
通常,带有字符串的动态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语句添加参数,因此我被卡住了。谢谢 我想我能理解你关于字符串替换问题的意思 这里有两个可供探索的备选方案。托马
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状态的最好方法?哦,天哪,至少阿尔巴哈里看起来是可以理解的。我想现在肯定会有比这更好的东西。