使用Any()时,对象未设置为对象的实例

时间:2017-06-12 05:26:42

标签: c# linq

我有以下LINQ

OfferOrder pricedOfferOrder = OrderData.OfferOrder
  .Where(d => d.Question.Any(e => e.Price != null)).FirstOrDefault().Question);

它工作正常,但当Price的{​​{1}}为空时,它会抛出以下异常:

  

对象引用未设置为对象的实例

我的课程如下:

Question

我该如何避免这种情况?

2 个答案:

答案 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;