gpt4 book ai didi

c# - 选择所有列,但在 linq 中仅按一个分组

转载 作者:太空狗 更新时间:2023-10-29 20:58:21 24 4
gpt4 key购买 nike

我一直在寻找一种方法来获取多列,但在 SQL 中仅按一个列分组,我找到了一些信息。但是我想不出在 linq 中执行此操作的方法。

我有以下玩具示例表:

| Id | Message | GroupId | Date |
|-------------------------------|
| 1 | Hello | 1 | 1:00 |
| 2 | Hello | 1 | 1:01 |
| 3 | Hey | 2 | 2:00 |
| 4 | Dude | 3 | 3:00 |
| 5 | Dude | 3 | 3:01 |

我想恢复具有不同 GroupId 的行的所有列,如下所示(使用“日期”desc 顺序):

| Id | Message | GroupId | Date |
|-------------------------------|
| 1 | Hello | 1 | 1:00 |
| 3 | Hey | 2 | 2:00 |
| 4 | Dude | 3 | 3:00 |

我真的不在乎从分组的行(第一行,第二行......)中挑选哪一行,只要是给定该组 ID 的唯一行即可。

到目前为止,我已经得出了以下代码,但它没有执行预期的操作:

List<XXX> messages = <MyRep>.Get(<MyWhere>)
.GroupBy(x => x.GroupId)
.Select(grp => grp.OrderBy(x => x.Date))
.OrderBy(y => y.First().Date)
.SelectMany(y => y).ToList();

最佳答案

这将为您提供每组一个项目:

List<dynamic> data = new List<dynamic>
{
new {ID = 1, Message = "Hello", GroupId = 1, Date = DateTime.Now},
new {ID = 2, Message = "Hello", GroupId = 1, Date = DateTime.Now},
new {ID = 3, Message = "Hey", GroupId = 2, Date = DateTime.Now},
new {ID = 4, Message = "Dude", GroupId = 3, Date = DateTime.Now},
new {ID = 5, Message = "Dude", GroupId = 3, Date = DateTime.Now},
};

var result = data.GroupBy(item => item.GroupId)
.Select(grouping => grouping.FirstOrDefault())
.OrderByDescending(item => item.Date)
.ToList();

//Or you can also do like this:
var result = data.GroupBy(item => item.GroupId)
.SelectMany(grouping => grouping.Take(1))
.OrderByDescending(item => item.Date)
.ToList();

如果你想控制 OrderBy 那么:

var result = data.GroupBy(item => item.GroupId)
.SelectMany(grouping => grouping.OrderBy(item => item.Date).Take(1))
.OrderByDescending(item => item.Date)
.ToList();

关于c# - 选择所有列,但在 linq 中仅按一个分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38893139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com