假設你的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);
正是我一直在與三元操作思維;你擊敗了我:p –
謝謝你的回答。即使有3類也可能嗎? 會測試:) – Aaron
@Aaron當然,是的。儘可能多的你需要的。 – JLRishe