我有两个相关的表集合和项目。
我想根据收藏属性订购选定的物品。
收藏
class Collection
{
int Id;
string Title;
bool Override;
int Level;
Datetime Till;
int OtherProp;
virtual ICollection<Item> Items{ get; set; }
}
物品
class item
{
int Id;
int OrderId;
string Title;
virtual Collection Collection{ get; set; }
}
我想选择所有项目并按以下顺序排序:
看起来像
var resultList = await _context.Items.Where(item=> item.OtherProp == 1)
.OrderBy(item => ??????????????)
.ThenBy(item=> item.Title).ToListAsync();
尝试以下查询:
var resultList = await _context.Items
.Where(item=> item.OtherProp == 1)
.OrderByDescending(item => item.Collection.Override)
.ThenByDescending(item => item.Collection.Till <= Datetime.Now() && item.Collection.Level == 1)
.ThenByDescending(item => item.Collection.Till <= Datetime.Now() && item.Collection.Level == 2)
.ThenBy(item => item.Title)
.ToListAsync();
var resultList = await _context.Items
.Where(item => item.OtherProp == 1)
.OrderBy(item =>
item.Collection.Override ? 0 :
(item.Collection.Level == 1 && item.Collection.Till < DateTime.Now) ? 1 :
(item.Collection.Level == 2 && item.Collection.Till < DateTime.Now) ? 2 : 3)
.ThenBy(item => item.Title)
.ToListAsync();
您可以使用三元运算符尝试此查询 它执行以下步骤: