我有一个表单上有多个字段(公司名称,邮编等),它允许用户搜索数据库中的公司。如果用户在多个字段中输入值,那么我需要搜索所有这些字段。我正在使用LINQ来查询数据库。如何将LINQ表达式合并为一个?
到目前为止,我已经设法编写一个函数,它将查看它们的输入并将其转换为表达式列表。我现在想把这个List变成一个单一的表达式,然后我可以通过LINQ提供程序执行。
我最初的尝试是如下
private Expression<Func<Company, bool>> Combine(IList<Expression<Func<Company, bool>>> expressions)
{
if (expressions.Count == 0)
{
return null;
}
if (expressions.Count == 1)
{
return expressions[0];
}
Expression<Func<Company, bool>> combined = expressions[0];
expressions.Skip(1).ToList().ForEach(expr => combined = Expression.And(combined, expr));
return combined;
}
但是这个失败的线沿线的异常消息“二元运算符,而不是用于定义...”。有没有人有任何想法我需要做的结合这些表达式?
编辑:更正了我忘记将结果和表达式一起分配给一个变量的行。感谢您指出这些人。
@Jon Skeet:'combined'将被键入为'Expression';你需要做一些工作来将它作为'Expression>'返回。 –
jason
2009-12-17 15:58:18
我同意你的第一个代码更容易理解,所以我会做出这个正确的答案。但是我实际上要使用第二个片段,因为这正是我需要的 - 我让事情太复杂,谢谢乔恩。 – gilles27 2009-12-17 15:59:17
具有讽刺意味的是,我在编辑这两条评论的同时也进行了编辑 - 但是因为这是使用的第二个片段,所以我认为我会保留原样:) – 2009-12-17 16:00:24