使用LINQ标记两个列表的交集

时间:2009-07-20 17:12:09

标签: linq set

我有两个列表,一个是另一个列表。

List 1: A, B, C, D, E
List 2: B, D, E

我想最终得到一个超集的集合,其中包含标记的子集中包含的项目。这似乎是LINQ可以做的事情,但我不确定语法。

Result: A, false
        B, true
        C, false
        D, true
        E, true

4 个答案:

答案 0 :(得分:3)

var list1 = new string[]{ "A", "B", "C", "D", "E" };
var list2 = new string[]{ "B", "D", "E" };
var result =
from a in list1
select new { Value = a, Has = list2.Contains( a ) };

foreach(var item in result ) {
    Console.WriteLine(string.Format("{0}, {1}", item.Value, item.Has);
}

答案 1 :(得分:3)

var list1 = new string[] {"A", "B", "C", "D", "E"};
var list2 = new string[] { "B", "D", "E"};

var query = from item1 in list1
            join item2 in list2 on item1 equals item2 into g
            select new { Name = item1, IsFound = g.Count() > 0};

答案 2 :(得分:1)

HashSet<char> subset = new HashSet<char>(list2)

var query = list1
  .Select(x => new
  {
    value = x,
    subsetHas = subset.Contains(x) }
  );

答案 3 :(得分:0)

var list1 = new[] { "A", "B", "C", "D", "E" };
var list2 = new[] { "B", "D", "E" };
var result =
    list1.Intersect(list2)
         .Select(el => new { el, true })
         .Union(list1.Except(list2)
                     .Select(el => new { el, false }));