私は完全にSQLに変換できるクエリを持っています。不明な理由により、LINQは最後のSelect()
を(データベースではなく).NETで実行するように決定します。これによりデータベースに対して追加のSQLクエリが(各アイテムごとに)実行されます。データベース内のクエリ全体をLINQでSQLに評価させるにはどうすればよいですか?
は実は、私は、SQLに完全な翻訳を強制する「奇妙な」方法を見つけた:
私は(これは期待通りまだ動作しません、本当に簡易版です)クエリを持っている:
MainCategories.Select(e => new
{
PlacementId = e.CatalogPlacementId,
Translation = Translations.Select(t => new
{
Name = t.Name,
// ...
}).FirstOrDefault()
})
01:私は別の
Select()
だけコピーすべてのメンバーを追加する場合は、しかし、
SELECT [t0].[CatalogPlacementId] AS [PlacementId]
FROM [dbo].[MainCategories] AS [t0]
SELECT TOP (1) [t0].[Name]
FROM [dbo].[Translations] AS [t0]
SELECT TOP (1) [t0].[Name]
FROM [dbo].[Translations] AS [t0]
...
:それは意志
は、SQLクエリの多くを生成し、
.Select(e => new
{
PlacementId = e.PlacementId,
Translation = new
{
Name = e.Translation.Name,
// ...
}
})
これは、単一のSQL文にコンパイルされます:
SELECT [t0].[CatalogPlacementId] AS [PlacementId], (
SELECT [t2].[Name]
FROM (
SELECT TOP (1) [t1].[Name]
FROM [dbo].[Translations] AS [t1]
) AS [t2]
) AS [Name]
FROM [dbo].[MainCategories] AS [t0]
任意の手掛かりなぜですか? LINQ to SQLをより一般的に単一のクエリを生成するように強制する方法(2回目のコピーなし)Select()
?
注:私はそれを本当に簡単にするように更新しました。
PS:唯一のアイデアは、同様のパターン(別のSelect()
を追加する)で後処理/変換を行うことです。
MyQuery()を表示してください。 –