【发布时间】:2019-04-12 17:35:18
【问题描述】:
我有一个记录进出项目的表格。
Id Name Status Created
1 A1 1 9/11/2018 14:00:00 <- 1
2 A1 1 9/11/2018 14:01:00 <- 2
3 A1 1 9/11/2018 14:02:00 <- 3
4 A2 1 9/11/2018 14:03:00 <- 4
5 A3 1 9/11/2018 14:04:00 <- 5
6 A1 0 9/11/2018 14:05:00 <- consider 1 is taken out.
7 A1 1 9/11/2018 14:06:00 <- 6
我想过滤这对;索引 1 和索引 6,来自表。并将状态为 1 的项目留给我。正确的表格应如下所示
Id Name Status Created
2 A1 1 9/11/2018 14:01:00 <- 2
3 A1 1 9/11/2018 14:02:00 <- 3
4 A2 1 9/11/2018 14:03:00 <- 4
5 A3 1 9/11/2018 14:04:00 <- 5
7 A1 1 9/11/2018 14:06:00 <- 6
但我的 lambda 表达式用于过滤状态为 1 的项目
public class Item {
public int Id;
public string Name;
public bool Status;
public DateTime;
}
var Items = new List<Item>();
// This give me everything
Items = await db.items.Where(i => i.Status == true).ToListAsync();
我得到了每个状态为 1 的项目的列表
Id Name Status Created
1 A1 1 9/11/2018 14:00:00 <- 1
2 A1 1 9/11/2018 14:01:00 <- 2
3 A1 1 9/11/2018 14:02:00 <- 3
4 A2 1 9/11/2018 14:03:00 <- 4
5 A3 1 9/11/2018 14:04:00 <- 5
7 A1 1 9/11/2018 14:06:00 <- 6
如何应用 lambda 表达式过滤出要从列表中删除的同名对?我想知道任何带有 lambda 表达式的快捷方式来过滤此类列表?
例子:
Id Name Status DateTime Id Name Status DateTime
6 A1 0 9/11/2018 14:05:00 1 A1 1 9/11/2018 14:00:00
// this id 1 and id 6 i want to remove based on name and date time
2 A1 1 9/11/2018 14:01:00
3 A1 1 9/11/2018 14:02:00
4 A2 1 9/11/2018 14:03:00
5 A3 1 9/11/2018 14:04:00
7 A1 1 9/11/2018 14:06:00
【问题讨论】:
-
OrderBy 创建降序。然后使用按名称分组,然后获取第一个结果。 var results = db.items.OrderByDescending(x => x.Created).Group(x => x.Name).Select(x => x.FirstOrDefault()).ToList();
-
你能解释一下为什么只过滤掉 ID 1 吗?它不是最接近日期的“对”。或者您的意思是如果多个条目具有相同的名称,您要过滤最早的条目?
-
@Sweeper,我想先删除日期时间最早的一对。
-
这个逻辑可以用lambda表达式吗?
-
我对你在做什么感到很困惑。你能解释一下为什么要删除 ID 1 和 6 吗? ID 6 没有名称为 A1 的所有条目中的最早日期。 ID 1 和 2 不应该去掉吗?