【发布时间】:2016-05-02 19:45:10
【问题描述】:
我有一个这样的 linq 语句
dbContext.Items
.Where(
p =>
(p.Client.Contact != null && p.Client.Contact.Firstname.ToLower().Contains(searchText.ToLower()))
||
(p.Client.Contact != null && p.Client.Contact.Surname.ToLower().Contains(searchText.ToLower()))
||
(p.PolicyNumber != null && p.PolicyNumber.ToLower().Contains(searchText.ToLower()))
||
(
p.PolicyLivesAssureds
.Where(
pl =>
pl.Contact != null && pl.Contact.Firstname.ToLower().Contains(searchText.ToLower())
|| pl.Contact.Surname.ToLower().Contains(searchText.ToLower())
).Count() > 0
)
)
).OrderBy(p => p.IeUtem);
这实际上是自动完成所需要的。我想要做的是能够准确地知道我的 5 个条件中的哪一个已匹配并显示已匹配的特定项目。例如说 PolicyNumber 已匹配,我只想发送该行的 policynumber,如果名称已匹配,我只想发送该行的名称。
有没有办法做到这一点;
【问题讨论】:
-
由于您使用的是
OR,我建议将其拆分为 5 个单独的查询。这样更容易计算单独组件的结果并将结果存储在专用对象中。不过,由于您使用的是OrderBy,您可能希望在某处再次合并数据。 -
你使用 C#6.0 吗?如果是这样,某些表达式可以简化为:
p.Client.Contact != null && p.Client.Contact.Firstname.ToLower().Contains(searchText.ToLower())到p.Client.Contact?.Firstname.ToLower().Contains(searchText.ToLower())
标签: c# sql database linq select