List<branch_rating> ObjRat = new List<branch_rating>();
ObjRat=(_Context.branch_rating
.GroupBy(a => a.restaurant_branch_id)
.Select(a => new { rating = a.Sum(b => b.rating), Name = a.Key })
.OrderByDescending(a => a.rating)).ToList();
我尝试将查询放入var
变量,然后添加对象。
下图显示错误。
我想从branch_rating表中获取有四列的数据,我也尝试使用var然后在对象中逐个添加列表数据。
答案 0 :(得分:1)
只需阅读并理解错误描述的内容:
您正在尝试将匿名类型(具有2个属性名称和评级)转换为另一个对象类型branch_rating。
你有2个解决方案:
使用匿名类型(使用var):
var ObjRat=(_Context.branch_rating
.GroupBy(a => a.restaurant_branch_id)
.Select(a => new { Rating = a.Sum(b => b.rating), Name = a.Key })
.OrderByDescending(a => a.rating))
.ToList();
然后,在您的代码中,只需访问列表成员的评级和名称属性。
使用您的类型定义branch_rating,在Select中使用它,并使用适当的构造函数。
List<branch_rating> ObjRat = new List<branch_rating>();
ObjRat=(_Context.branch_rating
.GroupBy(a => a.restaurant_branch_id)
.Select(a => new branch_rating() { <Your branch_rating properties assignments here> })
.OrderByDescending(a => a.rating)).ToList();
如果您的branch_rating对象没有空构造函数,请在Select中调用具有良好参数的正确构造函数。
答案 1 :(得分:1)
如果你创建一个像DOTopResturant这样的自定义类,包括数据成员branch_rating,branch_id然后创建一个DOTopResturant类型的对象,将变量q中的每个项目添加到该对象中会更好。
List<branch_rating> ObjRat = new List<branch_rating>();
ObjRat = _Context.branch_rating.ToList();
var q = (_Context.branch_rating
.GroupBy(a => a.restaurant_branch_id)
.Select(a => new { branch_rating = a.Sum(b => b.rating), branch_id = a.Key })
.OrderByDescending(a => a.branch_rating)).ToList();
List<DOTopResturant> ObjTopRes = new List<DOTopResturant>();
foreach (var item in q)
{
ObjTopRes.Add(new DOTopResturant() { branch_id = Convert.ToInt32(item.branch_id), branch_rating = Convert.ToInt32(item.branch_rating) });
}
return ObjTopRes;
答案 2 :(得分:0)
将选择(图片中的第三行)更改为:
.Select(a => new DOTopRestaurant {rating = a.Sum(b => b.rating), Name = a.Key})
答案 3 :(得分:0)
删除ObjRat的声明并使用var:
var ObjRat=(_Context.branch_rating
.GroupBy(a => a.restaurant_branch_id)
.Select(a => new { rating = a.Sum(b => b.rating), Name = a.Key })
.OrderByDescending(a => a.rating))
.ToList();
您的列表是anonymous type不属于branch_rating
类型的列表。
如果您想将其转换为branch_rating
,请使用另一个Select
创建一个new branch_rating(...)
,将相应的参数传递给构造函数。
PS你还应该看看.NET命名约定。