2012-11-16 40 views
2

我有一個類作爲將作爲IEnumerable傳遞給MVC視圖的摘要。這個類看起來像:將Linq Group按結果映射到對象

public class FixedLineSummary 
{ 
    public long? CustomerId { get; set; } 
    public string CustomerName { get; set; } 
    public int? NumberOfLines { get; set; } 
    public string SiteName { get; set; } 
} 

結果從數據庫返回擁有所有的單條目,所以我使用LINQ這些使用總結:

var summary = (from r in result 
       let k = new {r.CustomerId, CustomerName = r.CompanyName, r.SiteName} 
       group r by k into t 
       select new 
       { 
        t.Key.CustomerId, 
        t.Key.CustomerName, 
        t.Key.SiteName, 
        Lines = t.Sum(r => r.lines) 
       }); 

當我試着投,結果到我對象,但我只是不斷收到一個錯誤:

Instance argument: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<Domain.Entities.FixedLineSummary>' 

有沒有辦法將linq查詢的結果轉換爲我的類的枚舉?

+0

您如何_cast_他們? –

+0

對不起,應該說。只需要.AsEnumerable (); – GrahamJRoy

回答

5

你不能施放匿名類型FixedLineSummary因爲兩者沒有在所有相關的(編譯器)。相反,您需要手動創建您的課程實例:

IEnumerable<FixedLineSummary> summaries = summary 
    .Select(s => new FixedLineSummary 
    { 
     CustomerId = s.CustomerId, 
     CustomerName = s.CustomerName, 
     NumberOfLines = s.NumberOfLines, 
     SiteName = s.SiteName 
    }) 
    .ToList(); 
+0

你在和誰說話;) – Servy

6

你應該改變投射到創建類,而不是一個匿名類型:

var summary = from r in result 
       let k = new {r.CustomerId, CustomerName = r.CompanyName, r.SiteName} 
       group r by k into t 
       select new FixedLineSummary 
       { 
        CustomerId = t.Key.CustomerId, 
        CustomerName = t.Key.CustomerName, 
        SiteName = t.Key.SiteName, 
        NumberOfLines = t.Sum(r => r.lines) 
       };