如何将布尔转换为表达式

时间:2020-04-11 07:40:01

标签: c# linq exception lambda expression

Company 1: (Input Box 1)
Company 2: (Input Box 2)
...

我在许多地方都有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; } 并将其转换为方法,但是Linq不允许我运行它,并给了我这个错误。如何解决此错误?

错误文字

LINQ to Entities无法识别方法'Boolean SearchPersonByName(MrSanadBaseDb.Entities, System.Nullable`1 [System.Int64],System.String)方法和此方法 方法不能转换为商店表达式。

2 个答案:

答案 0 :(得分:1)

答案here

实体框架使用表达式,因此它可以读取LINQ内容的语法并将其转换为sql。 C#方法调用不是将其转换为sql的东西。如果您想了解更多,可以阅读here

答案 1 :(得分:0)

@KingOfArrows 所述,您的SearchByPerson方法无法翻译,因此您需要将此方法写入Expression中。此外,实体框架允许您在相同的上下文中编写子查询。

这样您就可以编写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();