【问题标题】:LINQ to Objects: How to join different properties in the same List of objectsLINQ to Objects:如何在同一个对象列表中加入不同的属性
【发布时间】:2015-05-10 10:45:55
【问题描述】:

假设我有一个具有以下结构的 Item 对象

Name         Parent Item Name
Service 1   
Stock 1      Service 1
Stock 2 

[更新]:

因此,如果一个项目有一个父项目名称,它就会成为一个子项目。我想验证所有父项名称都是有效的 Names 值。例如,在示例数据中,Stock 1 被视为子项目,因为它具有 Service 1 作为其父项目,并且 Service 1 是有效的项目名称,因为它已经存在于名称中我尝试执行以下操作,但这确实不返回结果:

var aa = from item in items
                 join
                     item2 in items
                     on item.Name equals item2.ParentRef.Value.ToString()
                 select new { item.Name };

【问题讨论】:

  • 有效名称是什么意思?
  • 有效我的意思是它在名称中。
  • 在名称字段中是什么意思?
  • !items.Select(i => i.ParentItemName).Where(n => n!=null).Except(items.Select(i => i.Name)).Any() 怎么样?

标签: c# linq linq-to-objects


【解决方案1】:

为了使其更具可读性,这里有 2 个查询:

var listOfNames = items.Select(t => t.Name);

var answers = items.Where(item => i.ParentItemName != null && 
                         !listOfItems.Contains(i.ParentItemName));

答案会给你一个无效项目的列表。

【讨论】:

    【解决方案2】:

    这应该返回 Join 预期的项目列表

    items.Select(x=>items
                 .select(y=> {
                               if(x.Name == y.ParentName)
                                 return y;
                               else
                                 return null;
                              })
                 ).Where(x=>x!=null)
    

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 2021-03-17
      • 2018-04-16
      相关资源
      最近更新 更多