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)