2016-05-24 16 views
2

2つのプロパティのうちの1つであるキーを使用してデータのコレクションをグループ化しようとしていますが、それはnullではありません。プロパティの1つはnull、もう一方はそうではありませんが、毎回同じではありません。条件に基づいてグループ化する方法

私は何をしたいのですが、このようなものです:SomeNumber(NULL可能intは)nullでないのであれば

repo.Data.GroupBy(d => d.SomeNumber != null ? d.SomeNumber: d.SomeString) 

、それによってグループ、SomeStringによって他のグループ。

+1

私は 'd.SomeNumber!= nullだと思いますか? d.SomeNumber.ToString():d.SomeString'はうまくいくはずですか? –

答えて

2

あなたがされるエラーはおそらくです:

「NULL可能」と「文字列」

GroupyByが同等の種類を期待し、あなたがあなたの? :ことを確認する必要があるとの間には暗黙的な変換はありません同じ型の2つの値を返します。

repo.Data.GroupBy(d => d.SomeNumber!= null ? d.SomeNumber.ToString(): d.SomeString); 

または何SomeStringに応じて、あなたが1Nullable<int>)を確認する必要がある場合は

repo.Data.GroupBy(d => d.SomeNumber!= null ? d.SomeNumber: int.Parse(d.SomeString)); 

あると"1"string)が一緒にグループ化されないあり、私はこの方法をお勧めします:

repo.Data.GroupBy(d => d.SomeNumber??(object)d.SomeString); 
3

repo.Data.GroupBy(d => d.SomeNumber != null ? d.SomeNumber.ToString() : d.SomeString); 

またはこれが動作(またはあまりにも不明瞭である)しない場合は、Tuple使用することができます。

repo.Data.GroupBy(d => new Tuple<int?,string>(d.SomeNumber, d.SomeString)) 

をか(つまり、intボクシング伴うだろうが)あなたはobjectにすべてをキャスト:

repo.Data.GroupBy(d => d.SomeNumber != null ? (object)d.SomeNumber : (object)d.SomeString)); 
+0

私は2番目のアプローチが好きですが、この場合は、 'SomeNumber'が** '**'でない場合でも、常に**両方の値でグループ化するため、機能しません。 –

+0

@ManfredRadlwimmerはそれを避けるべき第3の方法を追加しました。 –

+0

ちょうど同じ考えがあった;) –

関連する問題