比较两个不同的列表以填充第三个列表

时间:2014-06-11 04:49:06

标签: c# linq

我有两个不同类型的列表,它们有一个我需要比较的常见guid。

如果两个列表中都存在该值,我需要在第三个列表中填充isPresent属性。

 class a {
 Guid stub;
 string name;
 int number;
 }

 class b {
 Guid SecondStub;
 .
 .

 }
 class temp 
 {
  bool isPresent;
  string somethingElse;
 }

 ------------------------------------------

现在我有一个类型a和b的列表,我需要在第三个列表中填充isPresent属性。

 foreach (var a in ListofA)
 {
 temp.Add(new Temp(){ 
 isPresent = ListOfB.Where(l => l.SecondStub == a.Stub).Equals(null)
 })};

无效..请帮助。

2 个答案:

答案 0 :(得分:1)

在linq语法中,它应该如下所示:

var temps = from a in ListofA
           join b in ListofB on a.SecondStub == b.Stub
           select new temp { isPresent = True, 
                             OtherProperty = "something", 
                             ThirdProperty = "something else"};

虽然你没有在临时任何地方说出哪一个是真的,但只有isPresent标志。

也许你的意思是在temp中包含属性值?

答案 1 :(得分:0)

Where不工作的原因是Where总是返回一个对象,因为它返回一个可枚举的,并且可能没有任何项,但它仍然不是null。

使用Any而不是Where。

 var c = a
    .Select(x => new Temp {
        IsPresent = b.Any(z => z.SecondStub == x.Stub)
    })
    .ToList();

(来自我的手机,因此可能会关闭格式化)