无法将此代码转换为LINQ并预览到数据网格视图。
我看过this回答,但它没有帮助我
select tbl_user.id,tbl_user.name,tbl_user.family, sum(tbl_price.price)
from tbl_user,tbl_price
where tbl_user.id=tbl_price.user_id_fk
group by tbl_user.name+''+tbl_user.family,tbl_user.id,tbl_user.name,tbl_user.family
请帮我将此代码转换为linq
答案 0 :(得分:0)
您基本上需要加入这两个表,将结果分组为UserId和
在User的每个项目的Price属性值上调用Sum
方法。
像这样的东西
var usersWithTotalPrice = (from a in db.Users
join b in db.UserPrice on a.UserId equals b.UserId
select new { UserId = a.UserId,
FamilyName = a.Name + " " + a.FamilyName,
Price = b.Price}
).GroupBy(f => f.UserId, items => items, (a, b) => new
{
UserId = a,
FamilyName = b.FirstOrDefault().FamilyName ,
Price = b.Sum(g=>g.Price)
}
).ToList();
usersWithTotalPrice
变量将是一个项目的集合,每个项目都包含UserId
,FamilyName
和Price
属性。我使用了匿名投影。如果您有视图模型,则可以使用它。
public class UserWithPrice
{
public int Id { set;get;}
public string FamilyName { set;get;}
public decimal Price { set;get;}
}
并在投影部分
中使用它var usersWithTotalPrice = (from a in db.Users
join b in db.UserPrice on a.UserId equals b.UserId
select new { UserId = a.UserId,
FamilyName = a.Name + " " + a.FamilyName,
Price = b.Price}
).GroupBy(f => f.UserId, items => items, (a, b) =>
new UserWithPrice
{
Id = a,
FamilyName = b.FirstOrDefault().FamilyName ,
Price = b.Sum(g=>g.Price)
}
).ToList();
根据您的定义更新您的实体/ Dbset / Property名称。
答案 1 :(得分:0)
你甚至不需要使用linq。实际上,您可以使用datatable,并将gridview的数据源设置为该数据表。
dashboard_array