5

これについてはすでにいくつかの StackOverflow の質問がありますが、私のシナリオと一致するものはないようです。私は見たことを約束します。

linq を使用してデータベースに対していくつかのクエリを実行していますが、間違った SQL が生成される理由がわかりません。これは、私のコードのいくつかの場所で発生しています。よく知られている落とし穴に陥っているだけだと思いますが、Linq が where 句がダムであり、生成された SQL クエリに追加すべきではないと判断したように見える理由に頭を悩ませることはできません。

どうしてこれなの?

例:

var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i).ToList();

上記のクエリは、次の SQL を返します

{SELECT 
    [Extent1].[RecordId] AS [RecordId], 
    [Extent1].[AnotherId] AS [AnotherId], 
    [Extent1].[YetAnotherId] AS [YetAnotherId], 
    [Extent1].[WeLikeIds] AS [WeLikeIds], 
    [Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds]
    FROM [dbo].[SomeTable] AS [Extent1]}

ただし、次のクエリ:

var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i);
var testingToList = testing.ToList();

次の正しい SQL を生成します

{SELECT 
    [Extent1].[RecordId] AS [RecordId], 
    [Extent1].[AnotherId] AS [AnotherId], 
    [Extent1].[YetAnotherId] AS [YetAnotherId], 
    [Extent1].[WeLikeIds] AS [WeLikeIds], 
    [Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds]
    FROM [dbo].[SomeTable] AS [Extent1]
WHERE [Extent1].[RecordId] = '78e49f5c-0ff8-e311-93f4-00155d514a6d'}
4

1 に答える 1

-3

私はラムダ表記を好みますが、なぜこれが機能しないのかわかりません...

var testing = context.TableName1.Where(i => i.Param1 == object1.GuidParam).ToList();

よりクリーンで簡潔で、うまくいくはずです。

于 2015-05-14T15:17:37.150 に答える