Можно ли использовать предложение if с Linq где?
Если условие в предложении LINQ Where
Ответ 1
Да, вы можете:
var query = someList.Where(a => a == "something");
if (condition)
{
query = query.Where(b => b == "something else");
}
var result = query.ToList();
Поскольку Where
создает IQueryable
, выполнение откладывается до ToList
в моем примере, поэтому вы можете объединить Where
вместе столько, сколько хотите, а затем просто выполнить его после того, как вы передали все свои условия.
Ответ 2
var query = someList.Where(a => (someCondition)? a == "something" : true);
поэтому, если "someCondition" неверно, "Где" будет пропущено.
Ответ 3
Использовать метод WhereIf
extenstion avaialbe в linq
Пример
if (SearchControlMain.PostingID.HasValue)
query = query.Where(q => q.PostingID == SearchControlMain.PostingID);
вместо вышеперейдите к приведенному ниже
query = query.WhereIf(SearchControlMain.CategoryID.HasValue, q => q.CategoryID == SearchControlMain.CategoryID);
Ответ 4
Не уверен, что это уместно, но это очень полезно, вы можете использовать ifs довольно удобно с условным предложением where:
var r = (from p in productinfo.tblproduct
where p.Accountid == accountid
select p);
if (uuf1 != null)
r = r.Where(p => p.UnitUserField1 == uuf1);
if (uuf2!= null)
r = r.Where(p => p.UnitUserField2 == uuf2);
Итак, предложение where будет изменено в соответствии с тем, что находится в UUF1 или UUF2, т.е. у вас может быть только UUF1 с информацией, и в этом случае он примет это и проигнорирует предложение UUF2 where, у вас могут быть оба, в которых это будет либо вы, возможно, не имеете ничего в UUF1 или 2, а предложение where просто примет учетную запись как предложение where.
Ответ 5
У меня был такой сценарий, когда я должен был проверить нуль в самом списке. Это то, что я сделал.
items = from p in items
where p.property1 != null //Add other if conditions
select p;
// Use items the way you would use inside the if condition
Но, как заметил Келси, это тоже сработает -
items = items.Where(a => a.property1 != null);
Ответ 6
В моем случае было два "условных", в зависимости от ключей поиска, поэтому я сделал:
var query = db.Package.Include("SomeThing")
.Where(item => searchString1 == null || searchString1 == "" || item.Contains(searchString1))
.Where(item => searchString2 == null || searchString2 == "" || item.Contains(searchString2));
...
Ответ 7
Я не уверен, в чем вопрос, но возможный ответ может быть следующим:
Да,
list.Where(item => { if (Foo(item)) return true; else return false; });
Было бы сложным способом сказать что-то простое.