2017-06-09 13 views
0

Iクラスの以下の構造を有する:GROUPBY LINQクエリ

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;} 
} 

今、私はそのQuestion.Priceヌルに等しくないとOfferOrderを取得しようとしています。

たとえば、私はOfferOrderにオブジェクトA、B、Cを持っています。 Question.Price of Cはnullと等しくないので、LINQクエリはOfferOrder CpricedOfferOrderを返します。

私はGroupByによってそれをやろうとしましたが、運が見つかりませんでした。私はこのような何かをしようが、私はQuestion方法がここに十分であるシンプル

OrderOrderData OrderData = order; 
OfferOrder pricedOfferOrder = OrderData.OfferOrder.GroupBy(x=>x.Question)... 

答えて

1

によってグループ化した後の価格になりますどのようになど、まだ無知だ:

OrderOrderData OrderData = order; 

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

すべての 'Question'に対して' Price'がnullの場合、 'オブジェクト参照がオブジェクトのインスタンスに設定されていません。'どうすればこれを避けることができますか? –

+0

エラーを引き起こす行はどれですか?完全な詳細を提供する。 –

+0

これは起こりません!あなたはIQuerableに対して照会していますか、それともオブジェクトにlinqですか? –

0

任意の必要はありませんこの場合はGroupByを使用してください。

var offerOrder = OrderData.OfferOrder 
    .FirstOrDefault(oo => oo.Question.FirstOrDefault(q=>q.Price != null) != null); 

基本的に私たちは、述語を取り、これは、クエリの結果である。この述語を満たし、少なくとも1つの項目があることを提供FirstOrDefaultメソッドを使用:あなたはこのような何かを試みることができます。それ以外の場合は、デフォルト値が返されます。大文字の場合はnullです。したがって、最初のOfferOrderがある場合は、Questionの配列に少なくともQuestion(nullではない)が1つ含まれており、Priceはnullではありません。

この方法の詳細については、hereをご覧ください。

+0

@JenishRabadiya正解!ありがとう – Christos