2013-06-24 70 views
2

我有一個數據庫,每使用'n'秒插入CPU使用率,我的任務是從數據庫中獲取最新的CPU項目。我想從屬於特定服務器的數據庫中顯示最新的CPU條目,並且我想將結果保存到通用列表中。如何將通用列表<匿名類型>轉換爲通用列表<Classname>?

什麼我都試過了,

string match = "ServerX" 

    List<UsageCPU> cpus = (from a in db.UsageCPUs 
          where a.ServerID.Contains(match) 
          group a by a.ServerID into b 
          orderby b.Key 
          select new { ServerID = b.Key, 
          Usage = b.FirstOrDefault() }).ToList(); 

,我想通過結果cpus執行進一步的其他步驟循環。

,但我得到以下錯誤

無法隱式轉換類型 'System.Collections.Generic.List < AnonymousType#1>' 到 「System.Collections.Generic.List < FNC_RAQIT_HM_UI.UsageCPU> 」。

編輯

enter image description here UPDATE 從Satpal下面的查詢工作對我來說..但使用var

var cpus = (from a in db.UsageCPUs 
        where a.ServerID.Contains(match) 
        group a by a.ServerID into b 
        orderby b.Key 
        select new 
        { 
         ServerID = b.Key, 
         Usage = b.FirstOrDefault().Usage 
        }).ToList(); 

     foreach (var item in cpus) 
     { 
      if(bla bla..) 
     } 

好心幫!

+0

請給出反對的理由,以便我可以重建我的問題。謝謝 ! –

+0

嘗試'用法= b.First()。用法' – Satpal

回答

7

使用

List<UsageCPU> cpus = (from a in db.UsageCPUs 
         where a.ServerID.Contains(match) 
         group a by a.ServerID into b 
         orderby b.Key 
         select new UsageCPU //Added UsageCPU 
         { 
          ServerID = b.Key, 
          Usage = b.FirstOrDefault().Usage 
         }).ToList(); 

更新按錯誤

實體不能在LINQ構建以查詢實體

List<UsageCPU> cpus = (from a in db.UsageCPUs 
         where a.ServerID.Contains(match) 
         group a by a.ServerID into b 
         orderby b.Key 
         select new 
         { 
          ServerID = b.Key, 
          Usage = b.FirstOrDefault().Usage 
         }) 
        .AsEnumerable() 
        .Select(x => new UsageCPU 
        { 
         ServerID , 
         Usage    
        }).ToList(); 
+0

可能與丟失的括號有關選擇新的UsageCPU(){...} – Ric

+0

我仍然有一些愚蠢的錯誤,你的代碼聽起來很有希望..但我不知道我的錯在哪裏 –

+0

我設置了斷點,並且出現錯誤 - 實體或複雜類型'UsageCPU'不能在LINQ to Entities查詢中構造。 –

3

儘量選擇沒有新 當您選擇新的你匿名類型不能通過結果被強制轉換爲UsageCPU

(from a in db.UsageCPUs 
where a.ServerID.Contains(match) 
group a by a.ServerID into b 
orderby b.Key 
select a) 

,或者使用VAR,然後循環

var cpus = (from a in db.UsageCPUs 
         where a.ServerID.Contains(match) 
         group a by a.ServerID into b 
         orderby b.Key 
         select new { ServerID = b.Key, 
         Usage = b.FirstOrDefault() }).ToList(); 
+0

你的意思是,通過cpus循環? –

+0

是的。關於'b.FirstOrDefault(x => x.Usage)'lambda表達式必須返回類似於'x => x的布爾值。用法== anyval'或使用它沒有lamda –

+0

仍然沒有運氣,我得到相同的錯誤 - 無法隱式轉換類型'雙'到'bool'在b.FirstOrDefault(x => x.Usage) –

相關問題