gpt4 book ai didi

c# - SQL 查询中不包含 Where 子句

转载 作者:太空狗 更新时间:2023-10-29 20:04:23 25 4
gpt4 key购买 nike

我目前正在使用 EntityFramework 6.0 在 C# 4.0 中创建一个应用程序。

我正在尝试从数据库中检索项目列表,但问题是 EF 框架生成的 SQL 查询不包含 where 子句。

因此,整个表/ View 都加载到内存中,大约需要 10 秒才能获得 2 或 3 个项目。

下面是我的 GenericRepostitory 中的方法:

public IList<TEntity> GetList(Func<TEntity, bool> where, params Expression<Func<TEntity, object>>[] navigationProperties)
{
using (var dbContextScope = contextScopeFactory.CreateReadOnly())
{
IQueryable<TEntity> dbQuery = Context.Set<TEntity>().AsQueryable();

foreach (Expression<Func<TEntity, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<TEntity, object>(navigationProperty);

var list = dbQuery
.AsNoTracking()
.Where(where);

Context.Database.Log = s => Debug.WriteLine(s);

return list.ToList<TEntity>();
}
}

我这样调用它:

var repository = repositoryFactory.Get<Context, Entity>();
var items = repository.GetList(x => x.FakeID <= 10);

返回结果很好,但需要大约 10 秒才能检索到。而当debug写入生成的SQL查询时,where子句无处可去

如何修改我的函数 GetList 以包含 where 子句?

我希望我对这些信息足够清楚,我很抱歉我的英语不好。这不是我的母语:/

无论如何,谢谢你的帮助

最佳答案

更改您的方法签名

GetList(Func<TEntity, bool> where, ...

GetList(Expression<Func<TEntity, bool>> where, ...

您仍然可以像现在一样使用 lambda 调用它。Where 被用作“linq-to-objects”,覆盖从数据库读取的完整列表。使用表达式 EF 可以读取它以生成所需的 sql。

关于c# - SQL 查询中不包含 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33780143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com