【发布时间】:2022-01-18 16:57:11
【问题描述】:
我有 3 个具有通用 ID 的列表。我需要在一个列表中按对象分组,并从其他两个列表中提取数据。举个例子来加深理解
组名表:
| Id | Name |
|--------------|
| 1 | Hello |
| 2 | Hello |
| 3 | Hey |
| 4 | Dude |
| 5 | Dude |
countId 表:
| Id | whatever |
|---------------|
| 1 | test0 |
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 3 | test4 |
上次的表格:
| Id | timestamp |
|-----------------|
| 1 | 1636585230 |
| 1 | 1636585250 |
| 2 | 1636585240 |
| 3 | 1636585231 |
| 3 | 1636585230 |
| 5 | 1636585330 |
我希望得到这样的列表
| Name | whateverCnt | lastTimestamp |
|---------------------------------------|
| Hello | 3 | 1636585250 |
| Hey | 2 | 1636585231 |
| Dude | 0 | 1636585330 |
现在我有类似的东西,但它不起作用
return groupNames
.GroupBy(x => x.Name)
.Select(x =>
{
return new myElem
{
Name = x.Name,
lastTimestamp = new DateTimeOffset(lastTime.Where(a => groupNames.Where(d => d.Name == x.Key).Select(d => d.Id).Contains(a.Id)).Max(m => m.timestamp)).ToUnixTimeMilliseconds(),
whateverCnt = countId.Where(q => (groupNames.Where(d => d.Name == x.Key).Select(d => d.Id)).ToList().Contains(q.Id)).Count()
};
})
.ToList();
非常感谢您的建议。
【问题讨论】:
-
为什么要强制使用 LINQ?
-
据我所知,它具有更好的性能。这只是一个例子,我的列表比我在这个例子中使用的更大和不同。 stackoverflow.com/a/47262860/12999914
-
奇数;我认为 LINQ 解决方案的性能通常不如直接但更冗长的替代方案。如果您的列表真的“更大”,我想我会仔细考虑我将哪些部分(哈哈)推迟到 LINQ
-
LINQ 的性能更好或更差,具体取决于您使用它的方式以及您要解决的具体问题。
-
当你说“桌子”时,你是什么意思?举例说明这些数据是如何存放在正在运行的程序的内存中的