我有一个实体框架查询,如下所示。在这里,我尝试查找fax
和primary
个用户没有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
);
答案 0 :(得分:1)
警告:做这样的事情会导致Linq to Entities
出现问题那就是说,首先想到的是使用List
和Contains
(这基本上就是提供的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);