C# IQueryable LINQ Group By with null values.

我想根据一个属性从数据库中选择不同的值,当该属性是 null. IDs 在我的数据库里有 Strings

我的数据库是这样的。

Id1   Id2    Value
____________________
1     null   Value1
2     1      Value2
3     1      Value3
4     null   Value4
5     null   Value5
6     2      Value6
7     2      Value7
8     2      Value8

我想从我的查询中得到这样的输出。

Id1   Id2    Value
____________________
1     null   Value1
2     1      Value2  // i dont care which one from Id2 = 1 i get
4     null   Value4
5     null   Value5
6     2      Value6  // i dont care which one from Id2 - 2 i get

如你所见,我想得到一个 List 的所有元素,其中 Id2 为空,只返回一个元素,其中 Id2 是一样的(我不在乎哪个元素查询会返回)。

我试着编写一些代码。

query
   .Where(x => !string.IsNullOrEmpty(x.Id2))
   .GroupBy(z => z.Id2)
   .Select(grp => grp.FirstOrDefault())
   .ToListAsync();

但我没有得到我想要的东西,只有一个项目的表示方式。Id2 而只有一个 null 值,类似这样。

Id1   Id2    Value
____________________
1     null   Value1
2     1      Value2  // I want to get all elements where Id2 = null
6     2      Value6  // and distinct elements based on Id2

我的问题是,如何写查询EF 得到所有的空项目和所有基于属性的不同项目?

解决方案:

未测试。

var result = query.Where(x => x.Id2 == null || !query.Any(y => y.Id2 == x.Id2 && string.Compare(y.Id1, x.Id1) < 0))

这应该可以得到所有的行 Id2 is null 而只有最小的那一行 Id1 对于每一组 Id2

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何使用python从随机列表长度创建数据名?

2022-5-11 22:00:15

解决方案

在 plotly.express 中添加悬停文字

2022-5-11 22:00:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索