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

ニース1を、とても感謝を - それを:あなたはたとえば...あまりにも、他のことを行うことができます私が後にした3番目のものだった –

関連する問題