1

我需要根据各种条件对数据库中的条目进行排序。根据其某些属性,每个条目可以具有三种状态之一。

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 来实现这一点?我可以按这些条件对条目进行分组,然后对组进行排序吗?如果是这样,我该怎么做?

4

3 回答 3

3

您可以使用扩展方法

OrderBy(x => x.IsLocked).ThenBy(...)
                        .ThenBy(...)
于 2013-07-01T15:11:27.547 回答
1

你可以这样做:

var results = query
    .OrderByDescending(x => x.IsLocked)
    .ThenByDescending(x => !x.IsLocked && (!x.IsApproved ... ))
    .ThenByDescending(x => !x.IsLocked && (x.IsApproved ... ));

使用OrderByDescending/ThenByDescending将使符合条件的项目首先出现,然后是不符合条件的项目。如果您想让不符合条件的项目首先出现,只需使用OrderBy/ThenBy代替。

于 2013-07-01T15:13:36.370 回答
0

您可以使用 linq .OrderBy 和 .ThenBy 方法将项目按您建议的顺序放置,然后如果您使用的是 EF,则运行 SaveChanges()。

于 2013-07-01T15:16:27.897 回答