使用Linq构建一个处理String.Empty的Search查询

时间:2012-04-15 18:27:45

标签: linq linq-to-entities

我试图构建一个简单的搜索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命令中执行

2 个答案:

答案 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