以下の2つの機能的に同一のクエリ、SQLバージョンとラムダバージョンを参照してください。
from a in Lines.AsEnumerable()
where a.LineId == SomeGuid
select a
-
Lines.AsEnumerable()
.Where(a => a.LineId == SomeGuid)
.Select(a => a)
両方のクエリは、WHEREステートメントを持たないSQLに変換されます。
SELECT * FROM Line
ラムダでは、Where句の後にAsEnumerableを配置すると、結果のSQLにWHERE句が含まれるので便利です。したがって、ラムダクエリは次のようになります。
Lines
.Where(a => a.LineId == SomeGuid)
.AsEnumerable()
.Select(a => a)
結果のSQLはSELECT*FROM Line WHERE LineId=@paramです。
質問: Linq SQL構文を使用してこれを行うにはどうすればよいですか?つまり、結果のSQLステートメントにWHERE句を含めたいと思います。テーブルLineからすべてのレコードをプルすることは避けたいです。AsEnumerableをクエリ内のさまざまな場所に配置しようとしましたが、機能させることができませんでした。
編集:
単純なステートメントでは、最後にAsEnumerableを配置することは機能しますが、射影を使用する場合、EFは文句を言います(サポートされていない例外:複合型を構築できません...)
(from a in Lines
where a.LineId == SomeGuid
select new Line
{
LineId = a.LineId
}).AsEnumerable()
動作しません