8

SQL を linq 構文に変換するのに苦労しています。

CategoryID で相互に参照する 2 つのテーブル (Category と CategoryListing) があります。Category テーブル内のすべての CategoryID のリストと、CategoryListing テーブル内の対応するすべての一致の CategoryID のカウントを取得する必要があります。CategoryID が CategoryListing に存在しない場合でも、CategoryID が返される必要がありますが、頻度は 0 です。

次の SQL クエリは、期待される結果を示しています。

SELECT c.CategoryID, COALESCE(cl.frequency, 0) as frequency
FROM Category c
LEFT JOIN (
    SELECT cl.CategoryID, COUNT(cl.CategoryID) as frequency 
    FROM CategoryListing cl
    GROUP BY cl.CategoryID
) as cl
ON c.CategoryID = cl.CategoryID
WHERE c.GuideID = 1
4

2 に答える 2

15

テストされていませんが、これでうまくいくはずです:

var q = from c in ctx.Category
        join clg in 
            (
                from cl in ctx.CategoryListing
                group cl by cl.CategoryID into g
                select new { CategoryID = g.Key, Frequency = g.Count()}
            ) on c.CategoryID equals clg.CategoryID into cclg
        from v in cclg.DefaultIfEmpty()
        where c.GuideID==1
        select new { c.CategoryID, Frequency = v.Frequency ?? 0 };
于 2009-02-18T10:12:24.590 に答える
0

先に進み、クエリ全体をデータベースのストアド プロシージャに移動しました。これは、そもそも LINQ を回避することで問題を解決します。

于 2014-02-13T16:11:16.020 に答える