C# 通过加入另一个列表获得水合物性质<;房地产>;关于唯一Id
我有两个列表,一个是C# 通过加入另一个列表获得水合物性质<;房地产>;关于唯一Id,c#,linq,C#,Linq,我有两个列表,一个是设备的列表,另一个是带有设备属性的工作流项的列表。列表中的设备属性只有一个值,ProcessId。列表有两个水合属性,ProcessId和Name。我想将列表.device.Name与列表中单个设备记录中的值混合 下面的LINQ查询将选择一个通用项,它基本上就是我要寻找的,但我宁愿只填写原始列表 var list = from item in workflowItems join equipment in barcodeEquipmentList on
设备的列表
,另一个是带有设备
属性的工作流项的列表。列表
中的设备
属性只有一个值,ProcessId
。列表
有两个水合属性,ProcessId
和Name
。我想将列表.device.Name
与列表中单个设备
记录中的值混合
下面的LINQ查询将选择一个通用项,它基本上就是我要寻找的,但我宁愿只填写原始列表
var list = from item in workflowItems
join equipment in barcodeEquipmentList on
item.Equipment.ProcessId equals equipment.ProcessId
select new
{
ProcessId = item.Equipment.ProcessId,
EquipmentName = equipment.Name
};
编辑
列表将相对较小,即使这样做也可以(除了这不起作用的事实)
…最终编辑
但这确实有效:
workflowItems.ForEach(x => x.Equipment = barcodeEquipmentList
.Where(e => e.Process.Id == x.Equipment.Process.Id)
.FirstOrDefault());
这段代码应该符合您的需要:
public class Equipment {
public int ProcessId { get; set; }
public string Name { get; set; }
}
public class WorkflowItem {
public Equipment { get; set; }
public void LoadEquipmentFrom(IEnumerable<Equipment> cache){
var equipment = cache.FirstOrDefault(e => e.ProcessId == Equipment.ProcessId);
if(equipment != null)
Equipment.Name = equipment.Name;
}
}
公共级设备{
public int ProcessId{get;set;}
公共字符串名称{get;set;}
}
公共类WorkflowItem{
公共设备{get;set;}
public void LoadEquipmentFrom(IEnumerable缓存){
var equipment=cache.FirstOrDefault(e=>e.ProcessId==equipment.ProcessId);
如果(设备!=null)
设备名称=设备名称;
}
}
您还可以将实例从缓存分配到现有实例,这无关紧要,因为两者必须具有相同的标识符device=device代码>。如果您有更多属性要设置,这将更容易。要进一步优化,请使用IDictionary
而不是IEnumerable
,因为您将经常阅读该集合
我猜您正在实现一种ORM,在这种情况下,我可以给您一个很好的建议:“已经有适合您需要的东西了。”。由于数据集不是很大(少于20条记录),所以我可以在不影响性能的情况下如下所示
workflowItems.ForEach(x => x.Equipment = barcodeEquipmentList
.Where(e => e.Process.Id == x.Equipment.Process.Id)
.FirstOrDefault());
你所说的“水合”是什么意思?也许这只是我团队中使用的行话。我希望WorkflowItem中的设备通过列表中基于ProcessId的相应设备项填充其值
workflowItems.ForEach(x => x.Equipment = barcodeEquipmentList
.Where(e => e.Process.Id == x.Equipment.Process.Id)
.FirstOrDefault());