1

さまざまな条件に基づいてデータベース内のエントリを並べ替える必要があります。各エントリは、その属性のいくつかに応じて、3 つのステータスのいずれかを持つことができます。

グループ 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)

リストを 3 つに分割し、後で再度追加することは避けたいと思います。Linq を使用してこれを達成する方法はありますか? これらの条件でエントリをグループ化し、グループを並べ替えることはできますか? もしそうなら、どうすればいいですか?

4

3 に答える 3

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 に答える