.其中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秒。
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更改为可枚举的任何地方。