Linq与数组相交

本文关键字:数组 Linq | 更新日期: 2023-09-27 18:21:09

我正在从数据库中获取一个表标签。

该表具有列ID和TagName

我正在做这样的事情来获得字符串列表:

var taglist = Model.Tags.Select(x => x.TagName.ToLower()).ToArray();

然后我将与另一个字符串数组进行比较,以获得两者中出现的字符串:

var intersectList = tagList.Intersect(anotherList);

我有我的列表,但现在我还希望每个项目的ID保留在与tagList对应的交集列表中。(可以只是一个int数组)

有人能帮上忙吗?

Linq与数组相交

不要使用intersect,它只适用于相同类型的集合。您可以进行简单的联接或其他形式的筛选。最简单的方法是将字符串列表放入HashSet中,并根据该集中包含TagName的标记进行筛选。这样,你就可以不投影你的标签,这样它们就可以保留它们的id和其他属性。
var stringSet = anotherList.ToHashSet(StringComparer.OrdinalIgnoreCase);
var tagList = Model.Tags.Where(t => stringSet.Contains(t.TagName)).ToList();

并将它们放入一个列表中。除非您特别需要一个数组(用于需要数组的方法),否则不要将它们放入数组中。

你能做吗:

var intersectIds = Model.Tags
    .Where(tag => anotherList.Contains(tag.TagName))
    .Select(tag => tag.Id)
    .ToList();

也许使用Dictionary<int, string>而不是Array