今日、これを行うと次のことに気付きました。
var items = context.items.Where(i => i.Property < 2);
items = items.Where(i => i.Property > 4);
items var にアクセスすると、データ呼び出しとして最初の行のみが実行され、メモリ内で 2 番目の呼び出しが実行されます。ただし、これを行うと:
var items = context.items.Where(i => i.Property < 2).Where(i => i.Property > 4);
両方の where ステートメントを含むコンテキストに対して実行される式は 1 つだけです。linq ラムダの式を作成するために使用したい多くの変数がありますが、それらの有無によって式が変化するため、すべてのケースを満たすにはばかげた数の条件が必要になります。上記の最初の例のように Where() ステートメントを追加できると思っていましたが、すべての基準を含む単一の式にはなりません。したがって、私はラムダ自体をそのまま作成しようとしています:
//bogus syntax
if (var1 == "something")
var expression = Expression<Func<item, bool>>(i => i.Property == "Something);
if (var2 == "somethingElse")
expression = expression.Where(i => i.Property2 == "SomethingElse");
そして、それを context.Items to evaluate の場所に渡します。A) そうですか、B) もしそうなら、どのようにしますか?
編集:
IQueryable assessments = assessmentContext.Assessments;
metAssessments = metAssessments.Take(pageSize);
結果は
SELECT [Fields] <== edited
FROM [dbo].[Assessment] AS [t0]
INNER JOIN [dbo].[AssessmentComment] AS [t1] ON [t1].[ID] = [t0].[AssessmentID] <== because of load options
トップ x (pageSize で表される) がないのはなぜですか?