0

SQLステートメントをLINQに変換しようとしていますが、問題が発生しています。基本的に、私は製品のナビゲーションデータを保持するDataTableをクエリしようとしています(IDと説明の4つのカテゴリレベル、たとえば、メンズ>ジャケット>夏>プルオーバー)。ナビゲーションカテゴリは順番に表示され、「繰り返し」がないようにする必要があります。つまり、データの行で説明が発生すると、再び発生する可能性がありますが、別の説明に変更されると、以前の説明に戻ることはできません。私はAccessでこのSQLクエリを開発しましたが、テストデータに対して必要なことを実行しているようです。

SELECT Count(Nav.Level1Text) AS CountOfLevel1Text, Nav.Level1ID, Nav.SO, Nav.DC, Nav.Language
FROM Nav
GROUP BY Nav.Level1ID, Nav.SO, Nav.DC, Nav.Language
HAVING Count(Nav.Level1Text) > 1;

これが私がこれまでに得たものです:

var query = from table in navTable.AsEnumerable()
            group table by new
                           {
                               Cat1Id = table["Cat1Id"],
                               Cat1Text = table["Cat1Desc"],
                               SalesOrg = table["SalesOrg"],
                               DistChan = table["DistChan"],
                               Language = table["Language"]
                            }
            into groupedTable
            where groupedTable.Key.Cat1Text.Count() > 1 //Count doesn't exist
            select new {Cat1Count = groupedTable.Key.Cat1Text.Count(), groupedTable.Key.Cat1Id, groupedTable.Key.SalesOrg,
            groupedTable.Key.DistChan, groupedTable.Key.Language};

私はかなり近いようですが、「どこ」の部分に問題があります。Level1Textのカウントを取得する方法がわかりません(Cat1Text.Countメソッドはありませんが、何をすべきかを示すために残しました)。

編集:それで私はこれをあまり明確に説明していないことに気づきましたが、クエリは2つの異なるCat1Descに割り当てられたCat1Idがあることを検出します。これは私が「リピート」と呼んでいるものです。たとえば、「Mens」のCat1Descを持つ「1」のCat1Idが発生し、その後に「Womens」のCat1Descを持つ「2」のCat1Idが発生した場合、「Count(Cat1Desc)> 1」であるため、このクエリで通知されます。別のIDで。

4

1 に答える 1

1

私は解決策を見つけて、他の人が見ることができるように投稿したいと思いました:

var query = from table in navTable.AsEnumerable()
            group table by new
            {
                Cat1Id = table["Cat1Id"], SalesOrg = table["SalesOrg"],
                DistChan = table["DistChan"], Language = table["Language"]
            }
            into groupedTable
            where groupedTable.Select(x => x["Cat1Desc"]).Distinct().Count() > 1
            select new
            {
                Cat1Count = groupedTable.Select(x => x["Cat1Desc"]).Distinct().Count(),
                groupedTable.Key.Cat1Id, groupedTable.Key.SalesOrg,
                groupedTable.Key.DistChan, groupedTable.Key.Language
            };

グループから「Cat1Desc」を削除してから、「where」および「select」でDistinct()を使用することが重要でした。

于 2013-02-21T14:51:01.957 に答える