2016-09-23 78 views
0

我對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

相關問題