C# 如何根据条件分组
我试图对一组数据进行分组,其中键是两个属性之一,这两个属性不是null。其中一个属性为null,另一个不为null,但每次都不相同 我想做的是这样的: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”之间没有隐式转换
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));