Подтвердить что ты не робот

Если условие в предложении LINQ Where

Можно ли использовать предложение if с Linq где?

4b9b3361

Ответ 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);

LINQ WhereIf Метод расширения

LINQ to SQL Где необязательные критерии предложения

Ответ 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; });

Было бы сложным способом сказать что-то простое.