2011-05-25 92 views
1

我添加了一个方法,我们的服务基类来获得如何将表达式<Func <T,TPropertyType >>合并到我的IQueryable中?

public virtual IEnumerable<T> UnexportedToSun() 
    { 
     var query = GetIQueryable(); 
     query = query.Where(x => x.SunExportDate == null); 
     return query.ToList(); 
    } 

这一直运作良好的特定项目的所有未导出的情况下(T类型的项目)......但是我们已经有了几个新我们需要通过一些查询的情况。

我想要做的是使用

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(); 
    } 

任何人都可以指出我在正确的方向吗?

回答

3

如果你只需要添加更多的过滤器,你可以调用其中一次:

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 

对于通用的过滤器,你想表达返回布尔::

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(); 
} 
+0

尼斯之一,非常感谢 - 它是我之后的第三个 – 2011-05-25 13:51:24

相关问题