动态 Linq Where IN

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 查询库:添加对“包含”扩展的支持

Ali*_*ami 5

这里的其他人介绍了有趣的解决方法,但如果我们使用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)

有两个关键字itouterIt。它代表您作为参数传递的列表并outerIt代表集合本身。

所以这是我的工作示例:

context.Records.Where("@0.Contains(outerIt.ID)", new object[]{
   new string[] {"1", "2", "3"}
});
Run Code Online (Sandbox Code Playgroud)