Linq与数组相交

时间:2012-01-22 18:59:03

标签: c# .net linq

我从数据库获取表格。

该表具有列ID和TagName

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

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

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

var intersectList = tagList.Intersect(anotherList);

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

任何人都可以帮忙做一个好方法吗?

3 个答案:

答案 0 :(得分:6)

不要使用intersect,它只适用于相同类型的集合。您可以进行简单的连接或其他形式的过滤。最简单的方法是将字符串列表放入HashSet并按该集合中包含TagName的标记进行过滤。通过这种方式,您可以保持标记不被投影,以便保留其ID和其他属性。

var stringSet = new HashSet<string>(anotherList);
var tagList = Model.Tags.Where(t => stringSet.Contains(t.TagName)).ToList();

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

答案 1 :(得分:0)

也许使用Dictionary<int, string>代替Array

答案 2 :(得分:0)

你能做到:

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