[英]Using custom methods in LINQ query
我有这段代码:
int chunkSize = 1000;
var chunkQueryBase = _sdb.Entities.Where(m => FirstNumberGiver(m) < SecondNumberGiver(m)).OrderBy(c => c.Id);
var chunkQuery = chunkQueryBase.Take(chunkSize);
var x = chunkQuery.ToString();
var chunks = chunkQuery.ToList();
例如,FirstNumberGiver方法是这样的:
public int FirstNumberGiver(Entity entity)
{
string numberString = entity.Number;
string numpart1= "";
numpart1= Regex.Match(numberString , @"\d+").Value;
if (numpart1!= "")
{
return (Int32.Parse(numpart1));
}
else return 0;
}
SecondNumberGiver函数与FirstNumberGiver非常相似。 代码在此行给出异常:
var chunks = chunkQuery.ToList();
例外是这样的:
LINQ to Entities无法识别方法'Int32 FirstNumberGiver(Entity)'方法,并且此方法无法转换为存储表达式。
有这个问题的解决方案吗? 我怎样才能摆脱这个错误?
您的代码生成一个SQL查询,该查询使用SQL不知道的函数FirstNumberGiver和SecondNumberGiver,最简单的修复(但性能最差)是使用_sdb.Entities.ToList()获取内存中的所有实体,之后过滤它们
var chunkQueryBase = _sdb.Entities.ToList().Where(m => FirstNumberGiver(m) < SecondNumberGiver(m)).OrderBy(c => c.Id);
您可以先从数据库中查询数据,然后按以下方式对其进行过滤:
var chunkQueryBase = _sdb.Entities.ToList();
var resultSet = chunkQueryBase
.Where(m => FirstNumberGiver(m) < SecondNumberGiver(m))
.OrderBy(c => c.Id);
希望能帮助到你 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.