我今天注意到,如果我这样做:
var items = context.items.Where(i => i.Property < 2);
items = items.Where(i => i.Property > 4);
一旦我访问 items var,它只执行第一行作为数据调用,然后在内存中进行第二次调用。但是,如果我这样做:
var items = context.items.Where(i => i.Property < 2).Where(i => i.Property > 4);
我只得到一个针对包含两个 where 语句的上下文执行的表达式。我有许多变量,我想用它们来构建 linq lambda 的表达式,但是它们的存在或不存在会改变表达式,因此我必须有大量的条件来满足所有情况。我想我可以像上面的第一个示例一样添加 Where() 语句,但这不会以包含所有条件的单个表达式结束。因此,我试图只创建 lambda 本身:
//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 的位置进行评估。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
为什么没有 top x(以 pageSize 表示)?