2013-07-22 105 views
0

我有以下類別:LINQ - 選擇基於集合屬性匿名類型

public class DistributionItem 
{ 

    public int DeviceID { get; set; } 
    public string DeviceName { get; set; } 
    public double? Export { get; set; } 
    public double? Import { get; set; } 
    public List<double?> Tarrifs { get; set; } 
    public bool HasChild { get; set; } 
    public int OrderNum { get; set; } 
    public double PF { get; set; } 
    public int? MaxDmd { get; set; } 
    public string ImageUrl { get; set; } 
    public int ParentID { get; set; } 
    public double? Total { get; set; } 
} 

我想打一個LINQ Select在這個類的一個列表對拔出一些像這樣的屬性:

 return data.Select(x => new 
     { 
      x.DeviceID, 
      x.DeviceName, 
      x.HasChild, 
      x.KwhImport, 
      x.KwhExport, 
      x.MaxDmd, 
      x.ParentID 
     }).ToList(); 

如何將Tarrifs值作爲單獨的屬性添加到匿名對象?

+2

你爲什麼要限制這樣的項目數? – Guvante

回答

8

除非在編譯時知道列表中的項目數,否則不能。匿名類型的想法是,他們是靜態類型。編譯器在編譯時知道所有屬性及其類型。如果你不知道這些信息,你就不能使用它。

如果你知道有,例如,總是兩個項目,那麼你可以這樣做:

return data.Select(x => new 
{ 
    x.DeviceID, 
    x.DeviceName, 
    x.HasChild, 
    x.KwhImport, 
    x.KwhExport, 
    x.MaxDmd, 
    x.ParentID, 
    Tarrifs1 = x.Tarrifs[0], 
    Tarrifs2 = x.Tarrifs[1], 
}).ToList(); 
+0

那麼,這個問題應該是一個適當的解決方案?定期迭代? – ronen

+2

@ronen你可能只想把它作爲一個集合,而不是有多個變量。至於在使用查詢結果時如何使用該集合,我不能說,因爲我不知道你在做什麼。 – Servy

+0

@ronen我會重複已經說過。你爲什麼要限制物品的數量並平整Tarrifs集合? –