Объединить несколько, где условия, имеющие необязательные параметры в C# linq? - PullRequest
0 голосов
/ 17 марта 2020

Я ищу запрос LINQ, в котором у меня есть 3 параметра, и два являются необязательными параметрами. Я написал условия if-else, как показано ниже

if (id != null) { where condition} 
else if (name!= null) { where condition } 
else if (category != null) { where condition } 
else if (id != null && name != null) { where condition } 
else if (id != null && category != null) { where condition } 
else if (name != null && category != null) {where condition} 
else if (id != null && name != null && category != null ) { where condition } 

Я не хочу писать больше if-else условия, если добавлен еще один необязательный параметр

Примечание . Идентификатор не является первичным ключом

Ответы [ 3 ]

1 голос
/ 17 марта 2020

Оптимальным шаблоном для этого в EF является добавление условий Where только условно. EG

IQueryable<SomeType> qry = ...;
if (id != null)
{
  qry = qry.Where(x => x.Id == id);
}
if (name != null)
{
  qry = qry.Where(x => x.Name == name);
}
if (category != null)
{
  qry = qry.Where(x => x.Category == category);
}
var results = qry.ToList();

Таким образом, вы не загромождаете выражение множеством предикатов, которые ничего не делают, но могут испортить выполнение запроса.

0 голосов
/ 17 марта 2020

То, что я всегда делаю, ниже. Легко читать и запомнить.

myList
    .Where(x => id == null || x.Id == id)
    .Where(x => name == null || x.Name == name)
    .Where(x => category == null || x.Category == category);
0 голосов
/ 17 марта 2020

Вы можете написать это так:

id == null ? true : {id condition} &&
name == null ? true : {name condition} &&
category == null ? true: {category } and other conditions

Или

id == null || {id condition} &&
id == null || {id condition} &&

Возвращение true сделает утверждение истинным, если его значение равно нулю. это чисто, легко понять и развить.

Я надеюсь, что это помогает.

...