【发布时间】:2013-04-29 08:09:20
【问题描述】:
我得到以下代码
public class Personnel {
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int OrganizationalUnitId { get; set; }
public int RoleId { get; set; }
}
private List<Expression<Func<Personnel, bool>>> personnelFilter;
public void AddFilter(Expression<Func<Personnel, bool>> filter)
{
this.personnelFilter.Add(filter);
}
public IEnumerable<Personnel> GetResult()
{
IQueryable<Personnel> personnel = Store.Instance.Query<Personnel>();
foreach(var filter in this.personnelFilter)
{
personnel = personnel.Where(filter);
}
return personnel;
}
它现在使用 AND,因为它会将 Where 子句附加到已过滤的查询中。但我不想将其添加为 AND,而是添加为 OR。
假设我添加了过滤器:
model.AddFilter(a => a.FirstName == "Test")
model.AddFilter(a => a.FirstName == "More")
// Or adding something stupid like:
model.AddFilter(a => a.OrganizationalUnit == 1)
model.AddFilter(a => a.OrganizationalUnit == 1)
我想要以下查询:
WHERE Firstname == "Test" || Firstname == "More"
不做:
model.AddFilter(a => a.FirstName == "Test" || a.FirstName == "More")
这可能吗?换句话说,我得到了一个带有表达式的列表,我想在 where 子句中对它们进行 OR 操作而不是 AND,但我找不到让它工作的方法。有什么想法吗?
【问题讨论】:
-
什么是
Expression<Personnel, bool>?根据 MSDN,它不存在 (msdn.microsoft.com/en-us/library/bb506649.aspx)。我想这一定是我Func<Personnel, bool>? -
@Martin Mulder,纠正了它,我动态创建了一个示例。
-
您说您尝试过 Expression.Or 但它失败了。你能说出失败的原因吗?
-
缺乏知识,请看下面的答案,它的类型错误,但您可以轻松地将其转换为 Func
。
标签: c# lambda filtering where iqueryable