如果条件在LINQ Where子句中

时间:2010-09-10 07:16:49

标签: linq where

我可以在Linq中使用if子句吗?

8 个答案:

答案 0 :(得分:38)

是的,你可以喜欢:

var query = someList.Where(a => a == "something");
if (condition)
{
    query = query.Where(b => b == "something else");
}
var result = query.ToList();

因为Where正在生成IQueryable,所以执行会延迟到我示例中的ToList,因此您可以根据需要将Where链接到一起,然后在你通过所有条件后执行它。

答案 1 :(得分:31)

var query = someList.Where(a => (someCondition)? a == "something" : true);

所以,如果'someCondition'为false,将跳过'Where'。

答案 2 :(得分:6)

使用linq中提供的WhereIf扩展方法

示例

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 Extension Method

LINQ to SQL Where Clause Optional Criteria

答案 3 :(得分:4)

不确定这是否合适但是非常有用,你可以使用条件where子句非常方便地使用ifs:

 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子句只会将accountid作为where子句。

答案 4 :(得分:3)

在我的情况下有两个"有条件的"在哪里取决于搜索键,所以我做了:

    var query = db.Package.Include("SomeThing")
    .Where(item => searchString1 == null || searchString1 == "" || item.Contains(searchString1))
    .Where(item => searchString2 == null || searchString2 == "" || item.Contains(searchString2));
    ...

答案 5 :(得分:2)

我有一个这样的场景,我必须在列表中检查null。这就是我所做的。

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 :(得分:1)

我不确定问题是什么,但可能的答案可能是:

是,

list.Where(item => { if (Foo(item)) return true; else return false; });
但是,这会是一种简单易懂的复杂方式。

答案 7 :(得分:0)

from item in items
where condition1
&& (condition2 ? true : condition3)
select item

这是如何使用noob Linq语法来完成的。 仅当condition2为false时,这适用于condition3。 如果condition2为true,则基本上执行&& true,这对where子句没有影响。

所以它基本上是这样做的:

if(condition2)
{
    from item in items
    where condition1
    select item
else
{
    from item in items
    where condition1
    && condition3
    select item
}