C# 如何根据条件分组

C# 如何根据条件分组,c#,linq,C#,Linq,我试图对一组数据进行分组,其中键是两个属性之一,这两个属性不是null。其中一个属性为null,另一个不为null,但每次都不相同 我想做的是这样的: repo.Data.GroupBy(d => d.SomeNumber != null ? d.SomeNumber: d.SomeString) 因此,如果SomeNumber(nullable int)不是null,请按它分组,否则按SomeString分组。您收到的错误可能是: “Nullable”和“string”之间没有隐式转换

我试图对一组数据进行分组,其中键是两个属性之一,这两个属性不是null。其中一个属性为null,另一个不为null,但每次都不相同

我想做的是这样的:

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

因此,如果SomeNumber(nullable int)不是null,请按它分组,否则按SomeString分组。

您收到的错误可能是:

“Nullable”和“string”之间没有隐式转换

GroupyBy需要可比较的类型,因此您需要确保您的
?:返回两个相同类型的值

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
)和
“1”
string
)不是组合在一起,我建议您使用以下方法:

repo.Data.GroupBy(d => d.SomeNumber??(object)d.SomeString);
你可以用

repo.Data.GroupBy(d => d.SomeNumber != null ? d.SomeNumber.ToString() : d.SomeString);
或者,如果这不起作用(或者太含糊不清),您可以使用
元组

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

我猜
d.SomeNumber!=无效的d、 SomeNumber.ToString():d.SomeString
应该有效吗?我喜欢第二种方法,但在这种情况下它不起作用,因为它总是按两个值分组,即使
SomeNumber
不是
null
@ManfredRadlwimmer添加了第三种方法可以避免这种情况。我的想法是一样的;)
repo.Data.GroupBy(d => d.SomeNumber != null ? (object)d.SomeNumber : (object)d.SomeString));