我在服务基类中添加了一个方法来获取特定项目的所有未导出实例(类型为T的项目)
public virtual IEnumerable<T> UnexportedToSun()
{
var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
return query.ToList();
}
这很好用......但是我们有几个新案例需要传递一些查询。
我想要做的是使用
Expression<Func<T, TPropertyType>>
语法,以便我可以做这样的事情......
var transportInvoices = _purchaseInvoiceService.UnexportedToSun(x => x.InvoiceType == InvoiceType.Transport);
上述工作正如我想象的那样......但我不知道现在该去哪里......
public virtual IEnumerable<T> UnexportedToSun<TPropertyType>(Expression<Func<T, TPropertyType>> otherQuery)
{
var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
query = query //TODO: Add my other query
return query.ToList();
}
有人能指出我正确的方向吗?
答案 0 :(得分:3)
如果您只需要添加更多过滤器,则可以再次调用Where:
var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
query = query.Where(x => x.IsHappy);
return query.ToList();
这是LINQ的一个很好的功能 - 它是可组合的,所以你可以逐块建立。你也可以做其他的事情......例如:
var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
query = query.Select(x => x.ValueA + x.ValueB);
return query.ToList(); // Will return a List<int> or whatever instead
对于通用过滤器,您需要一个返回bool ::
的表达式public virtual IEnumerable<T> UnexportedToSun(Expression<Func<T, bool>> predicate)
{
var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
query = query.Where(predicate);
return query.ToList();
}