我需要根据各种条件对数据库中的条目进行排序。每个条目可以具有三种状态之一,具体取决于其某些属性。
A组(状态“已锁定”):
IsLocked == true;
B组(状态“无效”):
IsLocked == false &&
(IsApproved == false ||
Supplier.IsActive == false ||
Supplier.IsDeleted == true ||
ProductGroup.IsActive == false ||
ProductGroup.IsDeleted == true ||
Products.All(x => x.BestBeforeDate < DateTime.Now) == true)
C组(状态“有效”):
IsLocked == false &&
IsApproved == true &&
Supplier.IsActive == true &&
Supplier.IsDeleted == false &&
ProductGroup.IsActive == true &&
ProductGroup.IsDeleted == false &&
Products.Any(x => x.BestBeforeDate > DateTime.Now) == true)
我想避免在列表上运行,将其拆分为三个列表并在之后再次附加它们。有没有办法使用Linq实现这一目标?我可以按这些条件对条目进行分组,然后对这些组进行排序吗?如果是这样,我该怎么做?
答案 0 :(得分:3)
您可以使用扩展方法
OrderBy(x => x.IsLocked).ThenBy(...)
.ThenBy(...)
答案 1 :(得分:1)
你可以这样做:
var results = query
.OrderByDescending(x => x.IsLocked)
.ThenByDescending(x => !x.IsLocked && (!x.IsApproved ... ))
.ThenByDescending(x => !x.IsLocked && (x.IsApproved ... ));
使用OrderByDescending
/ ThenByDescending
会使符合条件的项目首先出现,然后出现不出现的项目。如果您想首先显示不符合条件的商品,只需改为使用OrderBy
/ ThenBy
。
答案 2 :(得分:0)
您可以使用linq .OrderBy和.ThenBy方法按照建议的顺序放置项目,然后在使用EF时运行SaveChanges()。