我有 2 个系列:
IEnumerable<Element> allElements
List<ElementId> someElements,
一起执行以下操作的简洁方法是什么:
[1] 验证 中的所有元素是否someElements
存在allElements
,条件失败时快速返回。
和
[2] 获取映射到的Element
对象列表。List<ElementId> someElements
每个Element
物体都有一个ElementId
谢谢你。
我有 2 个系列:
IEnumerable<Element> allElements
List<ElementId> someElements,
一起执行以下操作的简洁方法是什么:
[1] 验证 中的所有元素是否someElements
存在allElements
,条件失败时快速返回。
和
[2] 获取映射到的Element
对象列表。List<ElementId> someElements
每个Element
物体都有一个ElementId
谢谢你。
我会这样做:
var map = allElements.ToDictionary(x => x.Id);
if (!someElements.All(id => map.ContainsKey(id))
{
// Return early
}
var list = someElements.Select(x => map[x])
.ToList();
请注意,如果allElements
.
someElements.All(e => allElements.Contains(e));
allElements.Where(e => someElements.Contains(e.ElementId));
不如 Skeet 答案有效,但对于合理大小的集合来说已经足够了:
IEnumerable<Element> allElements = new List<Element>
{ new Element { Id = 1 }, new Element { Id = 2 } };
List<int> someElements = new List<int> { 1, 2 };
var query =
(from element in allElements
join id in someElements on element.Id equals id
select element)
.ToList();
if (query.Count != someElements.Count)
{
Console.WriteLine("Not all items found.");
}
foreach (var element in query)
{
Console.WriteLine ("Found: " + element.Id);
}