C# 。其中Lambda表达式加载整个表

C# 。其中Lambda表达式加载整个表,c#,asp.net,asp.net-mvc,entity-framework,lambda,C#,Asp.net,Asp.net Mvc,Entity Framework,Lambda,我采用代码优先的方法建立了一个实体框架项目: 我添加了通过插入函数访问存储库的方法: 存储库的界面: IQueryable<T> GetMany(Func<T, bool> where); 但是,当执行此操作时,它将加载整个表并向下过滤数据。你可以想象,这需要很长时间。我有一个ByID方法,它使用.Find()正确执行查询并以毫秒为单位获取记录。我完全不明白为什么会发生这种情况,或者我做错了什么。有没有更好的方法来抓取包含“Hello”字符串的字段的所有记录。当前进程

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

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

存储库的界面:

IQueryable<T> GetMany(Func<T, bool> where);

但是,当执行此操作时,它将加载整个表并向下过滤数据。你可以想象,这需要很长时间。我有一个ByID方法,它使用.Find()正确执行查询并以毫秒为单位获取记录。我完全不明白为什么会发生这种情况,或者我做错了什么。有没有更好的方法来抓取包含“Hello”字符串的字段的所有记录。当前进程需要5-10秒才能恢复记录。

如果我不得不猜测,
dbset
不是
IQueryable
dbset
。这可能是某种形式的
IEnumerable
,它导致用C#而不是SQL获取和过滤整个表

通过调用
ToList()
或将其放入
foreach
循环,我可以确保您不会在任何地方将dbset更改为可枚举的

对于linq,要将其转换为sql查询,必须为其提供一个表达式树,然后将其转换为sql。我想你的Func把事情搞砸了

尝试一下
dbset.Where(x->x.Name==“Billy”);

或者,正如Kirk在评论中指出的,更改为表达式树:

public virtual IQueryable<T> GetMany(Expression<Func<T, bool>> where)
公共虚拟IQueryable GetMany(表达式,其中)

好的,谢谢!我明天回去工作时会检查我的代码!不确定-不是我。我检查了一下..找到了一个
code
ToList()
code
,但它仍然不起作用。今天我要研究另一个答案,看看它是否有用!不幸的是,我无法投票支持他:(.对,或者只需将
Func
更改为
Expression
。一旦这样做,您还可以删除
AsQueryable
。您需要在不使用它的情况下开始,这一事实应该暗示您使用的是
Where
的IEnumerable重载,而不是IQueryable版本。
genericRepositoryName.GetStuffInHere(x => x.Name== "Billy");
public virtual IQueryable<T> GetMany(Expression<Func<T, bool>> where)