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

使用LINQ标记两个列表的交集,linq,set,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 HashSet子集=新的HashSet(列表2) var query=list1 .选择(x=>new { 值=x, su

我有两个列表,一个是另一个的子集

List 1: A, B, C, D, E
List 2: B, D, E
我希望最终得到一个超集集合,其中包含标记的子集中的项。这似乎是LINQ可以做的事情,但我不确定语法

Result: A, false
        B, true
        C, false
        D, true
        E, true
HashSet子集=新的HashSet(列表2)
var query=list1
.选择(x=>new
{
值=x,
subsetHas=subset.Contains(x)}
);
HashSet子集=新的HashSet(列表2)
var query=list1
.选择(x=>new
{
值=x,
subsetHas=subset.Contains(x)}
);

+1-特别是对于大型列表,对于每个项目,联接将比扫描列表2更有效。请注意,g.Any()比g.Count()>0.+1更可取-特别是对于大型列表,对于每个项目,联接将比扫描列表2更有效。请注意,g.Any()比g.Count()>0更可取。
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);
}
HashSet<char> subset = new HashSet<char>(list2)

var query = list1
  .Select(x => new
  {
    value = x,
    subsetHas = subset.Contains(x) }
  );
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};
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 }));