簡體   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