2017-04-13 50 views
-1

MVC和Linq的新手。不能隱式轉換類型列表到IEnumerable與Linq分組時

我能夠顯示所有記錄得很好,但我現在正在試圖通過名字來獲得的記錄數,只是選擇2個字段:姓名和Count

,我想我應該創建一個新視圖模型,填寫名稱,計數並將其發送到視圖。

上面的linq按預期工作。 視圖模型:

public class loadingViewModel 
    { 

     public IEnumerable<LoadingListCount> LoadingListCount { get; set; } 


    } 

    public class LoadingListCount 
    { 

     public string Name{ get; set; } 
     public int Count { get; set; } 

    } 

不過,我得到一個錯誤。不能將類型'System.Collections.Generic.List <>'隱式轉換爲'System.Collections.Generic.IEnumerable'。存在明確的轉換(您是否缺少演員?)

我試圖將查詢轉換爲列表和IEnumerable但沒有運氣。我搜索了其他帖子,但我沒有與他們運氣。

回答

1

由於兩個主要的原因,您會收到錯誤,第一個是Linq生成一個匿名類型的集合,並且所附的.ToList()將結果作爲匿名類型對象的列表。但預期的結果將是IEnumerable<LoadingListCount>類型,所以在這裏我們需要做一些改變,首先我們必須創建一個類型爲LoadingListCount的對象,現在Linq會給你預期的輸出,但是附加的.ToList()會將它們轉換爲List<LoadingListCount>以避免我們必須刪除它們。最後的查詢將如下所示:

var load = db.loadingPPHs.Where(s => s.WORKDAY == db.loadingPPHs.Max(x => x.WORKDAY)) 
         .GroupBy(fu => fu.TMNAME) 
         .Select(g => new LoadingListCount {Name = g.Key, Count = g.Count()}) 
1

您的查詢創建匿名對象的集合 - 你需要項目查詢到模型

IEnumerable<LoadingListCount> load = 
    db.loadingPPHs.Where(s => s.WORKDAY == db.loadingPPHs.Max(x => x.WORKDAY)) 
     .GroupBy(fu => fu.TMNAME) 
     .Select(g => new LoadingListCount { Name = g.Key, Count = g.Count() }) 
var viewModel = new loadingViewModel 
{ 
    LoadingListCount = load 
}; 
3
.Select(g => new {Name = g.Key, Count = g.Count()}) 

產生的匿名對象類型,並將它們放入列表中。

.Select(g => new LoadingListCount {Name = g.Key, Count = g.Count()}) 
:既然你需要 IEnumerable<LoadingListCount>,不 IEnumerable<SomeAnonymousType>通過代替 new操作的調用指定類型創建 LoadingListCount實例