我可以在Linq中使用if子句吗?
答案 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);
答案 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
}