Ali*_*ami 3 c# linq dynamic-linq
我怎么能定义一个where in标准Dynamic Linq?
我厌倦了下面的解决方法,但它一定不起作用,因为它没有意义!
context.Records.Where("@0.Contains(ID)", new object[]{
new string[] {"1", "2", "3"}
}); // throws error No property or field 'ID' exists in type 'String'
Run Code Online (Sandbox Code Playgroud)
编辑1:
感谢大家,您只需要在查询中使用itorouterIt关键字Dynamic.Linq,所以在我的示例中,我只需要使用outerIt:
context.Records.Where("@0.Contains(outerIt.ID)", new object[]{
new string[] {"1", "2", "3"}
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到更多示例和信息:高级 Linq - 动态 Linq 查询库:添加对“包含”扩展的支持
这里的其他人介绍了有趣的解决方法,但如果我们使用Dynamic.Linq库,它们就没有用了。Oleksandr Nahirniak 在Stackoverflow 上发现了这个问题。还有一篇关于高级 Linq 查询的博客文章Dynamic.Linq,在这里进行了审查。
从版本开始1.0.4,库也支持Contains扩展。它可以像下面那样完成:
query = Contact.GetContactsList()
.AsQueryable()
.Where("@0.Contains(outerIt.Country)", new List<String>() { "Austria", "Poland" });
Run Code Online (Sandbox Code Playgroud)
或者
query = Contact.GetContactsList()
.AsQueryable()
.Where("@0.Contains(outerIt.Country) && it.BirthDate.Year > @1", new List<string>() { "Austria", "Poland" }, 1955);
Run Code Online (Sandbox Code Playgroud)
有两个关键字it和outerIt。它代表您作为参数传递的列表并outerIt代表集合本身。
所以这是我的工作示例:
context.Records.Where("@0.Contains(outerIt.ID)", new object[]{
new string[] {"1", "2", "3"}
});
Run Code Online (Sandbox Code Playgroud)