2013-07-15 49 views
0

水合物業我有兩個名單,其中一個是Equipment名單和一個是WorkflowItems名單與Equipment屬性。 List<WorkflowItem>列表中的Equipment屬性只有其中一個水分值,ProcessIdList<Equipment>有兩個水合特性,ProcessIdName。我想滋潤List<WorkflowItem>.Equipment.Name與價值從List<Equipment>水合物通過加入另一個名單<Property>在唯一的ID

Equipment記錄下面這個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 = 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

也許這只是我的團隊中使用的術語。我希望WorkflowItem中的設備通過基於ProcessId的列表中相應的Equipment項目填充其值 – Tom

回答

0

由於數據集是不是很大(小於20條),我能夠以此爲低於無一命中性能

workflowItems.ForEach(x => x.Equipment = barcodeEquipmentList 
          .Where(e => e.Process.Id == x.Equipment.Process.Id) 
          .FirstOrDefault()); 
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,在這種情況下,我可以給你一個很好的建議:「已經有東西可以滿足你的需求。」