c# - C# LINQ,其中 list1 包含没有重复的 list2
问题描述
我有以下列表
var list1 = new List<Items>()
{
new Items { Id = 1, Name = "PC" },
new Items { Id = 2, Name = "Mug" },
new Items { Id = 3, Name = "Table" },
new Items { Id = 4, Name = "Table" }
};
var list2 = new List<string> { "Mug", "Table", "Buld" };
我正在尝试获取一个列表,其中 list1 包含 list2 而没有重复
var list1 = new List<Items>()
{
new Items { Id = 1, Name = "PC" },
new Items { Id = 2, Name = "Mug" },
new Items { Id = 3, Name = "Table" }
};
这是我尝试过但不起作用的方法
var result = list1.Where(t1 => list2.Any(x => x == t1.Name)).ToList();
解决方案
像这样的东西:
var result = list1
.Where(item => list2.Contains(item.Name)) // Name must be in list2
.GroupBy(item => item.Name)
.Select(group => group.First()) // no duplicates: 1st item from each group
.ToList();
有一个问题:当有重复时,应该采取哪个项目。在上面的代码中,我采用了首先出现在list1
. 如果你想拿最小的项目,Id
你应该修改Select
:
...
.Select(group => group.OrderBy(item => item.Id).First())
...
推荐阅读
- python - 导入时忽略 Python 可执行文件(控制台脚本)的 DeprecationWarning
- f# - 如何在 F# Saturn Framework 中获取查询参数?
- c# - 在处理实体框架时使用 C# Parallel.ForEach 替换大多数循环
- javascript - 无法使用 componentDidMount 从 API 获取数据:无法在未安装的组件上调用 setState(或 forceUpdate)
- prometheus - 在 Prometheus/PromQL 中合并/加入两个指标
- mysql - 在第二个查询中使用带有 IN 子句的第一个查询中的选定列
- php - 搜索系统 Symfony
- python - python/pandas:使用正则表达式删除字符串中方括号中的任何内容
- html - Ruby:在 Nokogiri HTML 构建器中包含原始 HTML
- python - 我目前正在用 Python 创建一个计算器,当我执行代码时,按钮位于错误的位置