【问题标题】:Compare two diferrent lists to Populate a third list比较两个不同的列表以填充第三个列表
【发布时间】:2014-06-11 04:49:05
【问题描述】:

我有两个不同类型的列表,它们有一个我需要比较的通用 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)
 })};

不工作..请帮助。

【问题讨论】:

  • 不...它有更多的属性。

标签: c# linq


【解决方案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"};

虽然你没有在 temp 中留下任何地方来说明哪一个是真的,但只有 isPresent 标志。

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

【讨论】:

  • 这在 temp 有多个属性的情况下不起作用。
  • @ShankyJain,请参阅我的编辑,了解如何将信息添加到其他属性。
【解决方案2】:

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

使用 Any 而不是 Where。

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

(来自我的手机,所以格式可能已关闭)

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多