0

EF 4.3.1 を使用して一連のレコードを取得しようとしています。特定の列に NULL 値を持つすべてのレコードを取得する必要があります。

データベースをチェックしたところ、その列で多くの行がnullであり、列もnull可能です。EFは奇妙なことをしています。プロファイラーを見ると、次の SQL が生成されています。

SELECT 
CAST(NULL AS int) AS [C1]
FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
WHERE 1 = 0

エンティティ列が「int?」として宣言されています。

次の組み合わせを使用してみましたが、同じ結果が得られます。

dbset.Where(e=>e.MyNullableInt == null).ToList();
dbset.Where(e=>e.MyNullableInt.Equals(null)).ToList();

この奇妙な動作を渡すことができる唯一の方法は、完全なセットをロードし、変数を設定し、このステップの後に where を実行することです。これは、すべてのデータをロードするため、非常に非効率的です。

これを達成する方法はありますか?

4

2 に答える 2

1

これを試してみてください...

dbset.Where(e=> (e.MyNullableInt ?? -1) == -1).ToList();
于 2013-05-07T04:21:27.763 に答える
1

マッピングで何らかの形でそのフィールドを必須にしているときにこれが起こっているのを見たので、マッピングを確認してください。

またはあなたのデータベースでは、そのフィールドは nullable ではありません。

于 2015-07-04T13:27:54.207 に答える