2016-08-18 3 views
2

リストから「Includes」を指定することは可能ですか?Linqからのリスト<string>

私は中に含まれる可能なサブテーブルのリストを持っている:

List<string> includedTables 

私の現在のデータベース呼び出しは次のようになります。

return db.SA_Items 
     .Where(x => x.LastUpdated > lastUpdated) 
     .Where(x => x.Active == true) 
     .OrderBy(x => x.ItemID) 
     .Skip(offset) 
     .Take(limit) 
     .ToList(); 

私は考え一覧でforeachの文字列に何とかへ.Include(....)をデータベース呼び出しに追加します。

たとえば、リストに2つの文字列がある場合、コードは次のようになります。

return db.SA_Items 
     .Include("first string in the list") 
     .Include("second string in the list") 
     .Where(x => x.LastUpdated > lastUpdated) 
     .Where(x => x.Active == true) 
     .OrderBy(x => x.ItemID) 
     .Skip(offset) 
     .Take(limit) 
     .ToList(); 

Listがnullの可能性もあります。

これを何とか動的に行うことはできますか?

誰でも私に何かポインタを教えてもらえますか?

+1

@Fabjan、それはそれは私がエラーを取得しています 'Include'方法 – octavioccl

答えて

2

確かに、あなたはいくつかのあなたのクエリを構築することができます手順:

IQueryable<SA_Item> query=db.SA_Items; 
if(includedTables!=null) 
    query = includedTables.Aggregate(query, (current, include) => current.Include(include)); 

query=query.Where(x => x.LastUpdated > lastUpdated) 
      .Where(x => x.Active == true) 
      .OrderBy(x => x.ItemID) 
      .Skip(offset) 
      .Take(limit); 
return query.ToList();// Materialize your query 
+0

の提案で、熱心な負荷関連企業でなければならない:「暗黙的に型「System.Data.Entity.Infrastructure.DbQueryを<変換できません。 SADatastore.SA_Items> 'to' System.Data.Entity.DbSet '。現時点で明示的な変換が存在します(キャストがありませんか?)。インクルード(インクルード)の部分... :( –

+0

あなたのクエリを保存するには、 'I2ery''型の代わりに 'var'を使用します。これで問題は解決します。 – octavioccl

+0

本当に申し訳ありませんが、" System.Linq.IQueryable 'Include'および 'System.Linq.IQueryable 型の最初の引数を受け入れる拡張メソッド' Include 'はありませんatastore.SA_Items> 'が見つかりました(usingディレクティブまたはアセンブリ参照がありませんか?) " –

0

次のstackoverflowのリンクで起こっている同様のことを行いますが、あなたの文字列で追加されたint型のインデックス置き換えることができます:

LINQ: Add RowNumber Column

0

あなたはconcatで行うことができます。

return db.SA_Items 
     .Concat(new string[] {"first string in the list", "second string in the list"}) 
     .Where(x => x.LastUpdated > lastUpdated) 
     .Where(x => x.Active == true) 
     .OrderBy(x => x.ItemID) 
     .Skip(offset) 
     .Take(limit) 
     .ToList(); 
関連する問題