如何使用LINQ延迟加载where条件

问题描述 投票:1回答:1

我是LINQ的新手

我正在尝试使用延迟加载来执行动态where,但我不知道该怎么做。

这是我的代码

protected int AnimalCount(System.Func<Animal, bool> expression = null, System.Func<Animal, bool> additionalExpression= null)
    {
    var records = (from temp in DbContext.Animal select temp);
    if (expression != null) records = records.Where(expression).AsQueryable();
    if (additionalExpression != null) records = records.Where(additionalExpression).AsQueryable();
    return records.Count();
}

现在,问题在于查询速度非常慢,我认为这是因为where子句应用于所查询的SELECT * FROM Animal列表上

c# linq lazy-loading
1个回答
0
投票

Linq to实体会构建表达式树,当您从中请求实际数据时,它将对数据库应用您的请求并返回结果。因此,默认情况下是延迟加载。您的解决方案工作正常,但我会稍作更改:


0
投票
  • 您应该使用System.Linq.Expression<System.Func<Animal, bool>>而不是System.Func<Animal, bool>,这对于与EF一起使用是必需的,并且我假设您希望将表达式作为SQL应用而不是在内存中。
© www.soinside.com 2019 - 2024. All rights reserved.