2016-09-23 4 views
0

ImはC#プログラミングには全く新しいものです。データベーステーブルからデータを動的に読み込む必要がある状況があり、カテゴリに応じてテーブルを切り替える必要があります。私がテーブルから読み込んだデータは常に同じですが、テーブルは異なっています。 クエリでデータベーステーブルを動的に切り替えることはできますか?クエリでデータベーステーブルを動的に切り替えることはできますか?

私は私の考えを説明するために、抽象コードを作っ:

    var userPost = if(Category == "News"){ db.News } else { db.Sport} 
        .Include(x => x.Popular) 
        .Include(x => x.Popular.Category) 
        .Where(x => x.User.Id == userId) 
        .OrderByDescending(x => x.CreatedAt) 
        .ProjectTo<PostViewModel>(_mapper.ConfigurationProvider) 
        .ToPagedList(pageIndex, pageSize); 

はありがとうございました。)

答えて

2

あなたのORMは、同じタイプに両方のテーブルをマッピングしている、あなたがこれを行うことができるはずと仮定:

var userPost = (Category == "News" ? db.News : db.Sport) 
       .Include(x => x.Popular) 
       .Include(x => x.Popular.Category) 
       .Where(x => x.User.Id == userId) 
       .OrderByDescending(x => x.CreatedAt) 
       .ProjectTo<PostViewModel>(_mapper.ConfigurationProvider) 
       .ToPagedList(pageIndex, pageSize); 

または、おそらくもう少し読み:

var table = (Category == "News" ? db.News : db.Sport); 

var userPost = table 
       .Include(x => x.Popular) 
       .Include(x => x.Popular.Category) 
       .Where(x => x.User.Id == userId) 
       .OrderByDescending(x => x.CreatedAt) 
       .ProjectTo<PostViewModel>(_mapper.ConfigurationProvider) 
       .ToPagedList(pageIndex, pageSize); 

あなたが多重化したい2つの以上のテーブルを持っている場合は、別の方法に出て選択ロジックを分割したい場合があります:私は、三項演算子と考えていただけで何

internal IQueryable<ROWTYPE> SelectTable(string category) 
{ 
    switch (category) 
    { 
     case "News": return db.News; 
     case "Sport": return db.Sport; 
     case "Arts": return db.Arts; 
     default: throw new ArgumentException("Unsupported category: " + category); 
    } 
} 



var table = SelectTable(Category); 

var userPost = table 
       .Include(x => x.Popular) 
       .Include(x => x.Popular.Category) 
       .Where(x => x.User.Id == userId) 
       .OrderByDescending(x => x.CreatedAt) 
       .ProjectTo<PostViewModel>(_mapper.ConfigurationProvider) 
       .ToPagedList(pageIndex, pageSize); 
+0

。あなたは私にそれを打つ:p –

+0

あなたの答えをありがとう。 3つのカテゴリでも可能ですか? それをテストします:) – Aaron

+0

@Aaronはい、もちろんです。あなたが必要とする数だけ。 – JLRishe

関連する問題