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