繁体   English   中英

在LINQ查询中使用自定义方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM