Model view controller 视图模型的EF查询值

Model view controller 视图模型的EF查询值,model-view-controller,viewmodel,Model View Controller,Viewmodel,我有一个EF查询,其中3列将根据其他表上的某些条件获取。输出列为ID、月份和收入。我想在视图中显示此信息,但如何显示 我不知道在这里使用ViewModel。 查询是: var serviceList1 = (from p in dbObj.ServiceWiseRevenues group p by new { p.service_id, p.pdate.Month } into g

我有一个EF查询,其中3列将根据其他表上的某些条件获取。输出列为ID、月份和收入。我想在视图中显示此信息,但如何显示

我不知道在这里使用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);

serviceList1
是匿名对象的列表。在视图中使用它们是非常重要的,因为它们的类型是由.NET运行时生成的

最好是这样定义ViewModel类(可能位于文件夹
/Models
):

然后用以下内容替换
选择新{…}
部分:

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) ...
@型号列表
//视图代码的其余部分,例如foreach(模型中的var收入)。。。

Hi Peter非常感谢您的及时回复。正如您所提到的,我已经更改了代码,但是ID和Revenue上存在数据类型转换错误。对于ID,它是不能隐式转换类型int?为了它的双倍收入?加倍。这是最基本的事情。请注意,我的类只是一个示例,在大多数情况下,您需要使用从数据库获得的类型。虽然对于一个ID来说,它可能是一个可为空的int(或
int?
)是值得怀疑的,因此您应该尝试在类中使用
int
,并使用
ID=g.Key.service\u ID.Value
进行赋值。如果所有物品都有一个ID,这应该是有效的,这在任何正常情况下都应该有。非常感谢peter,你让我开心。现在我想增加一些复杂性。我想把月号转换成月名,比如12月16日,所以我必须使用一个可数的。那么,在这种特殊情况下,如何使用ViewModel呢。谢谢,没有问题,但不要以评论的形式问后续问题,如果你真的需要,那么就创建一个新问题。
@model List<RevByMonth>
// rest of View code, e.g. foreach (var revenue in Model) ...