2016-10-23 9 views
0

のオブジェクトを含めるInclude文字列ではなく "Funcs"でクエリするオブジェクトを入力します。この時、私はそのように行う(pagedListFunc.IncludesList<string>です):私は(実際には、それはリストの上だpagedListFunc.IncludeFuncsを使用しようとするとEF6 - List <Func <T, object>>

IncludeFuncs = new List<Func<Dicts, object>>() 
{ 
    x => x.AspNetUsers, 
    x => x.DictDomains 
}; 

foreach (var include in pagedListFunc.Includes) 
{ 
    query = query.Include(include); 
} 

が、私はこのリストを使用します: List<Func<T, object>>):

foreach (var include in pagedListFunc.IncludeFuncs) 
{ 
    query = query.Include(x => include(x)); // doesn't work 
    // or 
    query = query.Include(include); // wrong parameter error 
} 

どのように適切にIncludeFuncsを使用するには?

答えて

1

パラメータの正しいタイプはExpression<Func<T, object>>です。つまり、IncludeFuncsは、docsに記載されているようにList<Expression<Func<Dicts, object>>()のタイプである必要があります。

サイドノートとして、Listを使用する代わりに、これはparamsキーワードと単純な配列の便利な使用例です。その方法では、メソッドを呼び出すときに可変数の引数を指定できます。これは、例えば次のようになります

(擬似コード):

public Dicts GetById(int id, params Expression<Func<Dicts, object>>[] includeProps) 
{ 
    ... 
    foreach(var include in includeProps) 
    { 
     query = query.Include(include); 
    } 
    ... 
} 

使用法:

私は式 `昨日試した
GetById(1, x => x.AspNetUsers, x => x.DictDomains); 
+0

<のFunc >'何かはしませんでした作業。今日は働いている(笑)。とにかく、あなたは正解です、ありがとう! – Staly

関連する問題