我正在尝试对一组数据进行分组,其中键是两个属性之一,它不是null。其中一个属性为null,另一个属性不是,但每次都不一样。
我想做的是这样的事情:
repo.Data.GroupBy(d => d.SomeNumber != null ? d.SomeNumber: d.SomeString)
因此,如果SomeNumber(nullable int)不为null,则按其分组,否则按SomeString分组。
答案 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