2011-05-25 71 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

相關問題