LINQ to Objects:如何在同一对象列表中加入不同的属性
LINQ to Objects: How to join different properties in the same List of objects
假设我有一个具有以下结构的 Item 对象
Name Parent Item Name
Service 1
Stock 1 Service 1
Stock 2
[更新]:
因此,如果一个项目有一个父项目名称,它就会成为一个子项目。我想验证所有父项名称是否都是有效的名称值。例如,在示例数据中,库存 1 被视为子项,因为它有服务 1 作为父项,服务 1 是有效的项目名称,因为它已经存在于名称中,我尝试执行以下操作,但确实如此不是 return 结果:
var aa = from item in items
join
item2 in items
on item.Name equals item2.ParentRef.Value.ToString()
select new { item.Name };
为了使其更具可读性,这里有 2 个查询:
var listOfNames = items.Select(t => t.Name);
var answers = items.Where(item => i.ParentItemName != null &&
!listOfItems.Contains(i.ParentItemName));
答案为您提供了无效项目的列表。
这应该是 return Join
所期望的项目列表
items.Select(x=>items
.select(y=> {
if(x.Name == y.ParentName)
return y;
else
return null;
})
).Where(x=>x!=null)
假设我有一个具有以下结构的 Item 对象
Name Parent Item Name
Service 1
Stock 1 Service 1
Stock 2
[更新]:
因此,如果一个项目有一个父项目名称,它就会成为一个子项目。我想验证所有父项名称是否都是有效的名称值。例如,在示例数据中,库存 1 被视为子项,因为它有服务 1 作为父项,服务 1 是有效的项目名称,因为它已经存在于名称中,我尝试执行以下操作,但确实如此不是 return 结果:
var aa = from item in items
join
item2 in items
on item.Name equals item2.ParentRef.Value.ToString()
select new { item.Name };
为了使其更具可读性,这里有 2 个查询:
var listOfNames = items.Select(t => t.Name);
var answers = items.Where(item => i.ParentItemName != null &&
!listOfItems.Contains(i.ParentItemName));
答案为您提供了无效项目的列表。
这应该是 return Join
所期望的项目列表items.Select(x=>items
.select(y=> {
if(x.Name == y.ParentName)
return y;
else
return null;
})
).Where(x=>x!=null)