如何根据条件进行GroupBy

时间:2016-05-24 08:05:03

标签: c# linq

我正在尝试对一组数据进行分组,其中键是两个属性之一,它不是null。其中一个属性为null,另一个属性不是,但每次都不一样。

我想做的是这样的事情:

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

因此,如果SomeNumber(nullable int)不为null,则按其分组,否则按SomeString分组。

2 个答案:

答案 0 :(得分: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))

或者你将所有内容都投射到object(虽然这会涉及装箱int):

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

答案 1 :(得分:2)

您收到的错误可能是:

  

Nullable&#39;之间没有隐式转换。和&#39;字符串&#39;

GroupyBy期望可比类型,因此您需要确保log4j.rootLogger=R返回两个相同类型的值。

? :

或取决于repo.Data.GroupBy(d => d.SomeNumber!= null ? d.SomeNumber.ToString(): d.SomeString); 是什么

SomeString

如果您需要确保repo.Data.GroupBy(d => d.SomeNumber!= null ? d.SomeNumber: int.Parse(d.SomeString)); 1)和Nullable<int>"1"组合在一起,我会&#39; d推荐这种方法:

string