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());