考虑以下
Person
实体:public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
使用以下由PredicateBuilder
构建的Expression
作为标准:
var byName = PredicateBuilder.True<Person>().And(x => x.FirstName == "Chaim");
当使用以下语法调用时,生成的SQL是正确的(包括WHERE
语句):
ctx.Set<Person>().AsExpandable().Where(x => byName.Invoke(x));
然而,当使用这种略微不同的语法调用时,没有 SQL WHERE
参与筛选,筛选是由 Enumerable.Where
来完成:
ctx.Set<Person>().AsExpandable().Where(byName.Invoke);
有什么想法吗?
Where(expression.Compile())
而不是Where(x => expression.Invoke(x))
。后来,在跟踪我们生产数据库时,我发现select [every column] from Table
没有 where 子句。前者直接来自文档! - dudeNumber4