簡體   English   中英

如何將布爾轉換為表達式

[英]How to convert bool to expression

var item = Db.BuyFactorWithTag.Where(b =>
     !b.IsSell && SearchUtility.SearchPersonByName(MR_SANAD_BASE , b.FK_Seller , input)).ToList();

public static bool SearchPersonByName(MrSanadBaseDb.Entities db, long? id, string input)
{
      id = id ?? 0;
      return db.Person.FirstOrDefault(p => p.PK_Person == id && !p.IsDeleted && p.FullName.Contains(input)) != null;
}

我在很多地方都有SearchByPersonName並將其變成了一種方法,但是 Linq 不允許我運行它並給我這個錯誤。 我該如何解決這個錯誤?

錯誤文本

LINQ 到 Entities 無法識別方法 'Boolean SearchPersonByName(MrSanadBaseDb.Entities, System.Nullable`1[System.Int64], System.String)' 方法,並且此方法無法轉換為存儲表達式。

可以在這里找到答案。

實體框架使用表達式,因此它可以讀取 LINQ 內容的語法並嘗試將其轉換為 sql。 C# 方法調用不會轉換為 sql。 如果您想對此進行更多研究,可以在此處閱讀

正如@KingOfArrows提到的,您的SearchByPerson方法無法翻譯,因此您需要將此方法寫入 Expression。 此外,Entity Framework 允許您在相同的上下文中編寫子查詢。

這樣您就可以編寫 LINQ 如下:

var item = Db.BuyFactorWithTag.Where(b =>
     !b.IsSell && 
     DB.Person.Any(p =>  p.PK_Person == (b.FK_Seller.HasValue ? b.FK_Seller.Value : 0) && !p.IsDeleted && p.FullName.Contains(input))).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM