2017-06-12 1 views
0

私はそれが正常に動作しますが、すべてのQuestionPriceがNULLのときには、以下の例外をスローし、次のLINQどれを使用するときに、オブジェクトのインスタンスに設定されていないオブジェクト()

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

を持っている:

私のクラスは次のようになり、オブジェクトのインスタンスに設定されていない

オブジェクト参照

public partial class OrderOrderData 
{ 
    public OrderOrderDataOfferOrder[] OfferOrder{get;set} 
} 

public partial class OrderOrderDataOfferOrder 
{ 
    public OrderOrderDataOfferOrderQuestion[] Question{get;set} 
} 

public partial class OrderOrderDataOfferOrderQuestion 
{ 
    public OrderOrderDataOfferOrderQuestionPrice Price{get;set;} 
} 

どうすればこの問題を回避できますか?

答えて

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がnullの場合、Anyを呼び出す際に意味はありません。さらに、FirstOrDefaultは、要素が見つからない場合はnullを返します。したがって、nullのプロパティQuestionを読み取ることはできません。

更新

あなたは(LINQは明らかに利用可能である)C#の以前のバージョンを使用している場合、あなたは次のことを試みることができる:

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; 
+0

これは 'C#' 6.0以上のバージョンで動作します –

+0

@DarshanPatelもちろんです。 OPが問題を抱えていれば、私は彼がここで言及するだろうと思う。 – Christos

+0

質問によると "それは正常に動作しますが、すべての質問の価格がnullの場合"問題はFirstOrDefaultでしかないと思います – jitender

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; 
関連する問題