表达式树lambda可能不包含空传播运算符
问题 :线路price = co?.price ?? 0,
price = co?.price ?? 0,
在下面的代码中给出了我上面的错误。 但如果我删除?
来自co.?
它工作正常。 我试图按照他们使用的MSDN示例进行操作?
在线select new { person.FirstName, PetName = subpet?.Name ?? String.Empty };
select new { person.FirstName, PetName = subpet?.Name ?? String.Empty };
那么,似乎我需要了解何时使用?
与??
什么时候不去。
错误 :
表达式树lambda可能不包含空传播运算符
public class CustomerOrdersModelView { public string CustomerID { get; set; } public int FY { get; set; } public float? price { get; set; } .... .... } public async Task ProductAnnualReport(string rpt) { var qry = from c in _context.Customers join ord in _context.Orders on c.CustomerID equals ord.CustomerID into co from m in co.DefaultIfEmpty() select new CustomerOrdersModelView { CustomerID = c.CustomerID, FY = c.FY, price = co?.price ?? 0, .... .... }; .... .... }
您引用的示例使用LINQ to Objects,其中查询中的隐式lambda表达式转换为委托 …而您使用EF或类似的,使用IQueryable
查询,其中lambda表达式转换为表达式树木 。 表达式树不支持空条件运算符(或元组)。
就这样做:
price = co == null ? 0 : (co.price ?? 0)
(我相信null-coalescing运算符在表达式树中很好。)
您链接的代码使用List
。 List
实现IEnumerable
但不实现IQueryable
。 在这种情况下,投影在存储器和?.
执行?.
作品。
你正在使用一些IQueryable
,它的工作方式非常不同。 对于IQueryable
,将创建投影的表示,并且LINQ提供程序决定在运行时如何处理它。 出于向后兼容的原因, ?.
不能在这里使用。
根据您的LINQ提供程序,您可以使用plain .
仍然没有得到任何NullReferenceException
。
上述就是C#学习教程:表达式树lambda可能不包含空传播运算符分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/998833.html