0

文字列「baby」が含まれているかどうかに基づいて、クエリの結果をフィルタリングしようとしています。

IEnumerable<ICD.ViewModels.HomeSearchViewModel> query =
                ICDUnitOfWork.AlphaGroups.Find().GroupJoin(ICDUnitOfWork.Alphas.Find(),
                                                           a => a.AlphaGroupID,
                                                           g => g.AlphaGroupID,
                                                           (alphaGroups, alphas) =>
                                                           new ICD.ViewModels.
                                                               HomeSearchViewModel
                                                               {
                                                                   AlphaGroups =
                                                                       alphaGroups,
                                                                   Alphas = alphas
                                                               })
                    .Where(row =>
                           row.AlphaGroups.Title.Contains("baby")
                           || row.Alphas.Any(alpha => alpha.Title.Contains("baby"))
                    );

問題は、Alpha.Title に文字列「baby」が含まれている場合、AlphaGroup 内のすべてのアルファではなく、「baby」を含むアルファのみを表示する必要があることです。AlphaGroup.Title に「baby」が含まれている場合は、グループ内の各アルファを引き続き表示する必要があります。どうすればこれを達成できますか?

4

1 に答える 1

1

次のようなことを試すことができます。

IEnumerable<ICD.ViewModels.HomeSearchViewModel> query =
                ICDUnitOfWork.AlphaGroups.Find()
                             .GroupJoin(
                                   ICDUnitOfWork.Alphas.Find()
                                                .GroupBy(a => new 
                                                                {
                                                                  BabyIndicator = a.Title.Contains("baby"),
                                                                  GroupID = a.AlphaGroupID
                                                                }),
                                   a => a.AlphaGroupID,
                                   g => g.Key.GroupID,
                                   (alphaGroups, alphas) =>
                                      new ICD.ViewModels.HomeSearchViewModel()
                                        {
                                          AlphaGroups = alphaGroups,
                                          Alphas = alphaGroups.Title.Contains("baby") ?
                                            alphas.Select(g => g.AsEnumerable()).Aggregate((g1,g2) => g1.Concat(g2)) :
                                            alphas.Aggregate(
                                            (g1,g2) => g1.Key.BabyIndicator ?
                                                       g1 :
                                                       g2).AsEnumerable()
                                        })

論理:

問題は、Alpha.Title に文字列「baby」が含まれている場合、AlphaGroup 内のすべてのアルファではなく、「baby」を含むアルファのみを表示する必要があることです。

ここでは、alpha を groupID でグループ化し、赤ちゃんがいるかどうかを調べて、これを alphGroups にグループ結合します。したがって、グループなし、赤ちゃんのいないグループ、赤ちゃんだけのグループ、それぞれのグループの 4 つの可能性があります。これをすべてまとめるために、集計します。グループがない場合はグループを返さず、グループが 1 つある場合はそのグループを返し、グループが 2 つある場合は赤ちゃんがいるグループのみを返します。

AlphaGroup.Title に「baby」が含まれている場合は、グループ内の各アルファを引き続き表示する必要があります。

ここでは、alphaGroup に赤ちゃんのタイトルがあるかどうかを確認します。グループ全体を返す場合は、アルファ タイトル ロジックを適用します。

于 2012-11-14T08:52:47.093 に答える