C# 在linq查询中聚合时出错

C# 在linq查询中聚合时出错,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我想将linq结果输出到IEnumerable列表,但得到一个强制转换错误: IEnumerable<vwHour> Total = (from p in vwHours.Where(ph => ph.UserName == UserName()) group p by p.Date into g select new {Date = g.Key.

我想将linq结果输出到IEnumerable列表,但得到一个强制转换错误:

IEnumerable<vwHour> Total = (from p in vwHours.Where(ph => ph.UserName == UserName())
                                 group p by p.Date into g
                                 select new {Date = g.Key.Value.ToString("mm/dd/yy"), Total = g.Sum(p => p.Hours),});
IEnumerable Total=(从p开始,单位为vwHours.Where(ph=>ph.UserName==UserName())
按p日期将p分组为g
选择new{Date=g.Key.Value.ToString(“mm/dd/yy”),Total=g.Sum(p=>p.Hours),};
错误消息:

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<UI.Models.vwHour>'. An explicit conversion exists (are you missing a cast?)
无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(是否缺少强制转换?)
我在这里遗漏了什么吗?

IEnumerable Total=(从p开始,单位为vwHours.Where(ph=>ph.UserName==UserName())
IEnumerable<vwHour> Total = (from p in vwHours.Where(ph => ph.UserName == UserName())
                             group p by p.Date into g
                             select new vwHour(){ //<----
                                          Date = g.Key.Value.ToString("mm/dd/yy"), 
                                          Total = g.Sum(p => p.Hours)
                                        });
按p日期将p分组为g 选择新的VWHORH(){//p.Hours) });
IEnumerable Total=(从p开始,单位为vwHours.Where(ph=>ph.UserName==UserName())
按p日期将p分组为g
选择新的VWHORH(){//p.Hours)
});

您正试图将匿名类型的列表放入
列表的变量中

如果要返回匿名类型的列表,只需将变量类型更改为
var

var Total = (  ...
如果您确实希望此查询返回
vwHour
的列表,则需要修改
选择

select new vwHour {  ...
但这要求vwhoor具有
Total
属性和
string Date
属性。但是我们可以从
groupby
select
子句中看到,您的
vwhoor
类型已经有了一个
Date
属性,该属性似乎是一个
可为空的
。因此,如果您将
select
更改为create
vwHour
s,则它将无法工作

如果你的课是这样的:

class vwHour
{
    public object UserName { get; set; }
    public DateTime? Date { get; set; }
    public int Hours { get; set; }
}
那么这就行了:

IEnumerable<vwHour> Total = 
    (from p in vwHours.Where(ph => ph.UserName == UserName())
     group p by p.Date into g
     select new vwHour { Date = g.Key, Hours = g.Sum(p => p.Hours), });
IEnumerable总计=
(以小时为单位从p开始,其中(ph=>ph.UserName==UserName())
按p日期将p分组为g
选择new vwhoor{Date=g.Key,Hours=g.Sum(p=>p.Hours),};

您正试图将匿名类型的列表放入
列表的变量中

如果要返回匿名类型的列表,只需将变量类型更改为
var

var Total = (  ...
如果您确实希望此查询返回
vwHour
的列表,则需要修改
选择

select new vwHour {  ...
但这要求vwhoor具有
Total
属性和
string Date
属性。但是我们可以从
groupby
select
子句中看到,您的
vwhoor
类型已经有了一个
Date
属性,该属性似乎是一个
可为空的
。因此,如果您将
select
更改为create
vwHour
s,则它将无法工作

如果你的课是这样的:

class vwHour
{
    public object UserName { get; set; }
    public DateTime? Date { get; set; }
    public int Hours { get; set; }
}
那么这就行了:

IEnumerable<vwHour> Total = 
    (from p in vwHours.Where(ph => ph.UserName == UserName())
     group p by p.Date into g
     select new vwHour { Date = g.Key, Hours = g.Sum(p => p.Hours), });
IEnumerable总计=
(以小时为单位从p开始,其中(ph=>ph.UserName==UserName())
按p日期将p分组为g
选择new vwhoor{Date=g.Key,Hours=g.Sum(p=>p.Hours),};
@user793468:The()在对象初始值设定项语法中是可选的@user793468:()在对象初始值设定项语法中是可选的。