0

C#/Linq は次のとおりです。

Fbc_tickets.GroupBy(t => t.Fbt_household_id)

LinqPad は、これが (MySQL) に変換されていることを教えてくれます。

SELECT t0.fbt_household_id
FROM fbc_ticket AS t0
GROUP BY t0.fbt_household_id

SELECT t0.fbc_ticket_id, t0.fbt_client_id, ...
FROM fbc_ticket AS t0
WHERE ((t0.fbt_household_id IS NULL AND @n0 IS NULL) OR (t0.fbt_household_id = @n0))
-- n0 = [1]

SELECT t0.fbc_ticket_id, t0.fbt_client_id, ...
FROM fbc_ticket AS t0
WHERE ((t0.fbt_household_id IS NULL AND @n0 IS NULL) OR (t0.fbt_household_id = @n0))
-- n0 = [2]

...

これらすべてのクエリを生成するのはなぜですか? もっと似たものを期待します

SELECT * FROM fbc_ticket GROUP BY fbt_household_id

以上です...

fbt_household_idunsigned int で、null 非許容です。

4

1 に答える 1

2

これは、linq-to-sql で常に見られます。最初にグループ化キーを取得するためのクエリ、次にキーごとのクエリを実行してグループを設定します。なぜこのように実装されているのかはわかりませんが、残念ながら、できることはあまりありません。Entity Framework は、この特定の領域では (他の領域ではなく) はるかにスマートです。

Linqpad は、既存の linq-to-sql コンテキストに接続するときにもそれを行います (その場でコンテキストを作成させないでください)。そのため、Linqpad とは何の関係もないと思います。

于 2012-09-28T21:11:13.067 に答える