LINQ中的IN条件替换多个OR条件

时间:2016-12-28 23:12:35

标签: c# linq

我有一个实体框架查询,如下所示。在这里,我尝试查找faxprimary个用户没有secondary信息的实体。我使用“OR”使用两个person_role_cd条件。

使用SQL“IN”条件制作相同逻辑的最佳LINQ方法是什么?例如,p.person_role_cd IN (“Primary”, “Secondary” )

query = query
.Where(l => l.loan_documents
 .FirstOrDefault(d => d.document_type_cd == “Application”)
 .loan_persons.Any(p => 
(
                                p.fax_no != null       
                                &&
                                 (
                                           p.person_role_cd == “Primary”
                                           ||
                                            p.person_role_cd == “Secondary”
                                  )
                                  )
                                  ) == false
                               );

2 个答案:

答案 0 :(得分:1)

警告:做这样的事情会导致Linq to Entities

出现问题

那就是说,首先想到的是使用ListContains(这基本上就是提供的SQL所做的)

List<string> roles = new List<string>() { "Primary", "Secondary" };
query = query
.Where(l => l.loan_documents
.FirstOrDefault(d => d.document_type_cd == “Application”)
.loan_persons.Any(p => p.fax_no != null && roles.Contains(p.person_role_cd));

无法确定你的否定属于哪里,留给读者留下了锻炼。它可能不能与Linq to Entities一起使用的原因是将List.Contains(尤其是局部变量)转换为SQL是它喜欢放弃的任务。如果你的类型实际上是两个项目,我会保持条件不变(除了考虑enum我的类型而不是字符串)

答案 1 :(得分:1)

首先创建一个包含要检查的所有字符串的数组。

var targetList = new[] {"Primary", "Secondary"};

然后用

替换OR条件
targetList.Contains(p.person_role_cd);