У меня есть Linq заявление в качестве такогозаявляющие какие условия были согласованы в 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 был сопоставлен, я хочу отправить только номер полиса для этой строки, а для других, если имя было сопоставлено, я хочу отправить только имя для этой строки.
Есть ли способ сделать это;
Так как вы используете 'OR' я рекомендовал бы разбить его в 5 отдельные запросы. Таким образом, легче подсчитывать результаты отдельных компонентов и сохранять их в выделенном объекте. Хотя, поскольку вы используете 'OrderBy', вы можете захотеть снова объединить данные. – Stefan
Вы используете C# 6.0? Это вы так, некоторое выражение можно упростить, например: 'p.Client.Contact! = Null && p.Client.Contact.Firstname.ToLower(). Содержит (searchText.ToLower())' to 'p.Client.Contact? .Firstname.ToLower(). Содержит (SearchText.ToLower()) ' – Ian