我有以下LINQ
OfferOrder pricedOfferOrder = OrderData.OfferOrder
.Where(d => d.Question.Any(e => e.Price != null)).FirstOrDefault().Question);
它工作正常,但当Price
的{{1}}为空时,它会抛出以下异常:
对象引用未设置为对象的实例
我的课程如下:
Question
我该如何避免这种情况?
答案 0 :(得分:1)
如果您使用的是C#6,则可以使用null conditional operator:
OfferOrder pricedOfferOrder = OrderData.OfferOrder
.Where(d => d.Question?.Any(e => e.Price != null) ?? false)
.FirstOrDefault()?.Question;
问题的根位于d.Question.Any...
和FirstOrDefault().Question
。如果d.Question
为空,则在调用Any
时没有任何意义。此外,如果未找到任何元素,FirstOrDefault
将返回null。因此,您无法读取null的属性Question
。
<强>更新强>
如果您使用以前版本的C#(LINQ显然可用),您可以尝试以下方法:
OfferOrder pricedOfferOrder = OrderData.OfferOrder
.Where(d => d.Question != null =>
? d.Question.Any(e => e.Price != null)
: false)
.FirstOrDefault();
var question = pricedOfferOrder !=null ? pricedOfferOrder.Question : null;
答案 1 :(得分:0)
如果您使用的是c#6或以上
OfferOrder pricedOfferOrder = OrderData.OfferOrder
.Where(d => d.Question.Any(e => e.Price != null)).FirstOrDefault()?.Question);
旧版
var data = OrderData.OfferOrder
.Where(d => d.Question.Any(e => e.Price != null)).FirstOrDefault();
OfferOrder pricedOfferOrder = data != null ? data.Question : null;