匿名类型不匹配LINQ to SQL查询?

时间:2015-12-28 11:57:53

标签: linq

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变量,然后添加对象。

下图显示错误。

i want to get data from branch_rating table having four columns.

我想从branch_rating表中获取有四列的数据,我也尝试使用var然后在对象中逐个添加列表数据。

4 个答案:

答案 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命名约定。