2016-12-27 67 views
0

我有一個EF查詢,其中3列將被提取基於其他表上的一些條件。輸出列是ID,月份和收入。我想在View上顯示這些信息,但是如何?EF查詢值ViewModel

我不知道在這裏使用ViewModel。 查詢是:

var serviceList1 = (from p in dbObj.ServiceWiseRevenues 
           group p by new { p.service_id, p.pdate.Month } into g 
           select new 
           { 
            ID = g.Key.service_id, 
            Month = g.Key.Month, 
            Revenue = g.Sum(c => c.total_revenue/c.tbService.tbCountry.CountryCurrencyConversionRate) 
           }).OrderByDescending(x => x.Month).ToList();  
      return View(serviceList1); 

回答

0

serviceList1是匿名的對象的列表。在View中使用它們將是不平凡的,因爲它們的類型是由.NET運行時生成的。

更好的是定義一個ViewModel類這樣的(可能是在文件夾/Models):

public class RevByMonth 
{ 
    int ID { get; set; }, 
    int Month { get; set; }, 
    double Revenue { get; set; }, 
} 

然後更換select new { ... }部分與此:

select new RevByMonth 
{ 
    ID = g.Key.service_id, 
    Month = g.Key.Month, 
    Revenue = g.Sum(...) 
} 

在最後指定類型RevByMonth查看模式:

@model List<RevByMonth> 
// rest of View code, e.g. foreach (var revenue in Model) ... 
+0

嗨,彼得塔nks很快的答覆。如上所述,我更改了代碼,但ID和收入存在數據類型轉換錯誤。 – Guri

+0

對於ID它不能隱式轉換類型int?爲int和收入其雙?加倍。 – Guri

+0

這是最基本的東西。請注意,我的課只是一個示例,在大多數情況下,您需要使用從數據庫中獲取的類型。儘管對於一個ID來說,它可能是一個可爲空的int(或者'int?')是值得懷疑的,所以你應該試着在類中使用'int',並使用'ID = g.Key.service_id.Value'作業。如果所有項目都有一個ID,這應該可以工作,幾乎在任何正常情況下都應該有這樣的ID。 –