我有这段代码:
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)'方法,并且此方法无法转换为商店表达式。
这个问题有解决方案吗?我怎样才能摆脱这个错误?
答案 0 :(得分:0)
您的代码生成一个SQL查询,该查询使用SQL不知道的函数FirstNumberGiver和SecondNumberGiver,最简单的修复(但性能最差)将使用_sdb.Entities.ToList获取内存中的所有实体()并在
后过滤它们var chunkQueryBase = _sdb.Entities.ToList().Where(m => FirstNumberGiver(m) < SecondNumberGiver(m)).OrderBy(c => c.Id);
答案 1 :(得分:0)
您可以先从数据库中查询数据,然后按以下方式对其进行过滤:
var chunkQueryBase = _sdb.Entities.ToList();
var resultSet = chunkQueryBase
.Where(m => FirstNumberGiver(m) < SecondNumberGiver(m))
.OrderBy(c => c.Id);
希望有所帮助:)