c# – Linq GroupBy将每个空值作为一个组
发布时间:2020-12-15 03:52:21 所属栏目:百科 来源:网络整理
导读:我有一个可空的int属性“GroupId”的对象. 有了这个对象的列表,我想在这个“GroupId”上做一个GroupBy.但是如果我这样做,所有的null值将组成一个组. 示例: 对象1:GroupId:NULL 对象2:GroupId:NULL 对象3:GroupId:1 对象4:GroupId:1 对象5:GroupId
我有一个可空的int属性“GroupId”的对象.
有了这个对象的列表,我想在这个“GroupId”上做一个GroupBy.但是如果我这样做,所有的null值将组成一个组. 示例: 对象1:GroupId:NULL 对象2:GroupId:NULL 对象3:GroupId:1 对象4:GroupId:1 对象5:GroupId:2 对象6:GroupId:2 MyList.GroupBy(f => f.GroupId,key => new {Object = key}); 我会得到3组. 如何取代4组?每个NULL值的一个组… 解决方法
这可能是最短的解决方案:
var grouped = MyList.GroupBy(f => f.GroupId != null ? (object)f.GroupId : new object(),key => new { Object = key }); 注意,组的“键”将是对象类型.对于空元素,我创建一个新的“空”对象.对象的平等对象将使它们全部不同.对于非空数字,我只需将它们放在对象中.盒装整数维持相等运算符.所以: new object().Equals(new object()) == false // always 和 ((object)1).Equals((object)1) == true // always 和 ((object)1).Equals((object)2) == false // always 更正确的解决方案将是实现IEqualityComparer< int?> public class MyComparer : IEqualityComparer<int?> { public bool Equals(int? x,int? y) { if (x == null || y == null) { return false; } return x.Value == y.Value; } public int GetHashCode(int? obj) { return obj.GetHashCode(); // Works even if obj is null :-) } } 并使用它: var grouped2 = MyList.GroupBy(f => f.GroupId,key => new { Object = key },new MyComparer()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读