我有两个列表,一个是Equipment
列表,另一个是WorkflowItems
列表Equipment
。 Equipment
列表中的List<WorkflowItem>
属性只有其中一个值为水合ProcessId
。 List<Equipment>
有两个属性,ProcessId
和Name
。我想使用List<WorkflowItem>.Equipment.Name
Equipment
记录的值来保留List<Equipment>
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
};
下面的LINQ查询将选择一个基本的项目,基本上做我正在寻找的东西,但我宁愿填写原始列表。
workflowItems.ForEach(x => x.Equipment = from e in barcodeEquipmentList
where e.Process.Id == x.Equipment.Process.Id
select e
);
修改 该列表将相对较小,即使做这样的事情也没关系(除了这个不起作用的事实)
workflowItems.ForEach(x => x.Equipment = barcodeEquipmentList
.Where(e => e.Process.Id == x.Equipment.Process.Id)
.FirstOrDefault());
...最终修改
但这确实有效:
{{1}}
答案 0 :(得分:0)
这段代码应该符合您的需求:
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;
}
}
您也可以将缓存中的实例分配给现有实例,因为两者必须具有相同的标识符Equipment = equipment;
才无关紧要。如果您要设置更多属性,那将更容易。要优化进一步使用IDictionary<int, Equipment>
而不是IEnumerable<Equipment>
,因为您将经常阅读该集合。
我猜你正在实施一种ORM,在这种情况下,我可以给你一个很好的建议:“已经有一些东西可以满足你的需求。”
答案 1 :(得分:0)
由于数据集不是很大(少于20条记录),因此我能够在不影响性能的情况下实现此目标
workflowItems.ForEach(x => x.Equipment = barcodeEquipmentList
.Where(e => e.Process.Id == x.Equipment.Process.Id)
.FirstOrDefault());