次のコードがあります。
IQueryable<SomeType> allItems = ...;
var selectedItems = allItems.Where( item => ( item.State == 1 || item.State == 3 ) );
Console.WriteLine( selectedItems.ToString() );
次のクエリがダンプされます。
SELECT [t0].[ItemId], [t0].[State], <other columns>
FROM [Items] AS [t0]
WHERE [t0].[State] = @p0 OR [t0].[State] = @p1
ご覧のとおり、実際の値 1 と 3 はクエリに挿入されず、代わりにパラメーターとして渡され、最適でない実行プランが選択されることがよくあります。
代わりに、どうにかして Ling-To-Sql を発行させることはできますWHERE [t0].[State] = 1 OR [t0].[State] = 3
か?