.其中Lambda表达式加载整个表

本文关键字:加载 Lambda 表达式 其中 | 更新日期: 2023-09-27 18:11:37

我用代码优先的方法建立了一个实体框架项目:链接到代码优先方法

我添加了一个方法通过插入一个函数来访问存储库:

存储库的接口:

IQueryable<T> GetMany(Func<T, bool> where);
EntityRepositoryBase方法:
public virtual IQueryable<T> GetMany(Func<T, bool> where)
{
     return dbset.Where(where).AsQueryable();
}

我如何访问它的例子:

genericRepositoryName.GetStuffInHere(x => x.Name== "Billy");

然而,当执行这个操作时,它正在加载整个表并过滤数据。你可以想象,这需要很长时间。我有一个使用. find()的ByID方法,它正确地执行查询并以毫秒为单位获取记录。我完全不知道为什么会发生这种情况——或者我做错了什么。是否有更好的方法来抓取包含"Hello"字符串的字段的所有记录?在当前进程中,获取记录需要5-10秒。

.其中Lambda表达式加载整个表

at a guess…

与linq,要将其转换为SQL查询,必须给它一个表达式树,然后它可以转换为SQL。我觉得你的Func搞砸了

try just dbset.Where(x -> x.Name=="Billy);

或者像Kirk在评论中指出的那样,改成表达式树:

public virtual IQueryable<T> GetMany(Expression<Func<T, bool>> where)

如果我必须猜测,dbset不是IQueryable<T>DbSet。这可能是IEnumerable<T>的一些时尚,这导致整个表在c#中获取和过滤,而不是SQL。

我要确保你没有通过调用ToList()或通过foreach循环将dbset更改为可枚举的任何地方。