我想根据一个属性从数据库中选择不同的值,当该属性是 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