1

我试图构建一个简单的搜索 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 为空,则查询仍会尝试查找“”,这会导致 NO RECORDS。

不用写一堆

if (!String.IsNullOrWhiteSpace(filter.LastName))

对于每个过滤器项目,有没有办法在 LINQ 命令中执行此操作?

4

2 回答 2

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
于 2012-04-15T18:33:00.013 回答
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
于 2012-04-15T18:33:24.017 回答