错误:对于带有 from 的 Linq,“表达式树 lambda 可能不包含空传播运算符”
Posted
技术标签:
【中文标题】错误:对于带有 from 的 Linq,“表达式树 lambda 可能不包含空传播运算符”【英文标题】:Error: "An expression tree lambda may not contain a null propagating operator" for Linq with from 【发布时间】:2020-07-08 22:20:34 【问题描述】:当我编写以下 Linq 时,我收到以下错误 - 有人可以建议我在没有收到错误的情况下编写相同的内容。 我的 Linq 如下:
我的孤儿列表 = ( 从 v in allViolations 来自所有检查结果中的 r 从 i in allItems 在哪里 r.InspectionResultId == i.InspectionResultId && i.InspectionItemId == v.InspectionItemId 选择新的 OrphanViolationsReport ViolationId = v.ViolationId, ViolationNumber = v.ViolationNumber, ViolationDate = v.ViolationDate, ViolationType = v.ViolationType.ViolationTypeCode, ItemYear = i.ItemYear, ItemMakeManufacturer = i.ItemMakeManufacturer, ItemModel = i.ItemModel, VIN = i.VIN, PIN = i.PIN, InspectionResultId = r.InspectionResultId, InspectionResultNumber = r.InspectionRequestNumber, DealerDmvNumber = r.DealerDmvNumber, InspectedCompanyName =(从 a.ContactId == r.InspectedCompanyDataId 选择 a.FirstName 的联系人中)?.FirstOrDefault() ).ToList();在“InspectedCompanyName = (from a in contacts where a.ContactId == r.InspectedCompanyDataId select a.FirstName)?.FirstOrDefault()”行 我收到以下错误 - 我怎样才能摆脱它 - 谢谢
表达式树 lambda 可能不包含空传播运算符请帮忙
【问题讨论】:
删除?.
,之前的查询永远不会返回null
。如果没有满足条件的项目,它将返回空集合。
您很可能还想在FirstOrDefault
之后使用?.
来访问属性。
【参考方案1】:
这是一个奇怪的 LINQ 规则。问题出在表达式中:
InspectedCompanyName = (from a in contacts where a.ContactId == r.InspectedCompanyDataId select a.FirstName)?.FirstOrDefault()
在您的选择中。不允许使用?.
。
谢天谢地,?:
(三元运算符/内联条件)是允许的,因此可以重写。为方便起见,您需要一个 let:
myOrphanList =
(
from v in allViolations
from r in allInspectionResults
from i in allItems
where
r.InspectionResultId == i.InspectionResultId &&
i.InspectionItemId == v.InspectionItemId
let firstName = from a in contacts // Pop your sub-query in a variable here
where a.ContactId == r.InspectedCompanyDataId
select a.FirstName
select new OrphanViolationsReport
ViolationId = v.ViolationId,
ViolationNumber = v.ViolationNumber,
ViolationDate = v.ViolationDate,
ViolationType = v.ViolationType.ViolationTypeCode,
ItemYear = i.ItemYear,
ItemMakeManufacturer = i.ItemMakeManufacturer,
ItemModel = i.ItemModel,
VIN = i.VIN,
PIN = i.PIN,
InspectionResultId = r.InspectionResultId,
InspectionResultNumber = r.InspectionRequestNumber,
DealerDmvNumber = r.DealerDmvNumber,
// USe ternary operator here
InspectedCompanyName = firstName == null ? null : firstName
).ToList();
这对我来说太复杂了,无法测试编译,但基本上就是这样。
也就是说,正如@SalahAkbari 指出的那样,这里的逻辑很奇怪。一个选择查询(我放入firstName
的那个)永远不会返回null
,它会返回一个空集合,那么有什么意义呢?
【讨论】:
以上是关于错误:对于带有 from 的 Linq,“表达式树 lambda 可能不包含空传播运算符”的主要内容,如果未能解决你的问题,请参考以下文章