我试图构建一个简单的搜索LINQ语句。当字符串传递到WHERE时,空字符串会导致错误的结果。
tmp = (from p in tmp
where
p.Customer.custEmail.Contains(filter.Email) &&
p.Customer.custLastName.Contains(filter.LastName) &&
p.orderID == id
select p).ToList();
}
如果filter.LastName为空,则查询仍会尝试查找“”,这会导致无记录。
没有写一堆
if (!String.IsNullOrWhiteSpace(filter.LastName))
对于每个Filter项,有没有办法在LINQ命令中执行 ?
答案 0 :(得分:1)
您可以为此编写扩展方法:
public static bool ContainsIfNotNullOrWhiteSpace(this string source, string searched)
{
return string.IsNullOrWhiteSpace(searched) ?
false :
source.Contains(searched);
}
然后您可以在查询表达式中使用它:
from p in tmp
where
p.Customer.custEmail.ContainsIfNotNullOrWhiteSpace(filter.Email) &&
p.Customer.custLastName.ContainsIfNotNullOrWhiteSpace(filter.LastName) &&
p.orderID == id
select p
答案 1 :(得分:1)
只需将支票添加到where子句:
from p in tmp
where
(!String.IsNullOrWhiteSpace(filter.Email) &&
p.Customer.custEmail.Contains(filter.Email)) &&
(!String.IsNullOrWhiteSpace(filter.LastName) &&
p.Customer.custLastName.Contains(filter.LastName)) &&
p.orderID == id
select p