C# LINQ-左连接和分组方式与和
我有两张单子C# LINQ-左连接和分组方式与和,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有两张单子 var stores = new[] { new { Code = 1, Name = "Store 1" }, new { Code = 2, Name = "Store 2" } }; var orders = new[] { new { Code = 1, StoreCode = 1, TotalValue = 14.12 }, new { Code = 2, StoreCode = 1, TotalValue = 24.12 }
var stores = new[]
{
new { Code = 1, Name = "Store 1" },
new { Code = 2, Name = "Store 2" }
};
var orders = new[]
{
new { Code = 1, StoreCode = 1, TotalValue = 14.12 },
new { Code = 2, StoreCode = 1, TotalValue = 24.12 }
};
var lj = (from s in stores
join o in orders on s.Code equals o.StoreCode into joined
from j in joined.DefaultIfEmpty()
group s by new
{
StoreCode = s.Code,
StoreName = s.Name
}
into grp
select new
{
StoreName = grp.Key.StoreName,
TotalValue = ???
}).ToList();
输出
StoreName=Store1 | TotalValue=38.24
StoreName=Store2 | TotalValue=0
如何将其转换为LINQ到SQL
var stores = new[]
{
new { Code = 1, Name = "Store 1" },
new { Code = 2, Name = "Store 2" }
};
var orders = new[]
{
new { Code = 1, StoreCode = 1, TotalValue = 14.12 },
new { Code = 2, StoreCode = 1, TotalValue = 24.12 }
};
var lj = (from s in stores
join o in orders on s.Code equals o.StoreCode into joined
from j in joined.DefaultIfEmpty()
group s by new
{
StoreCode = s.Code,
StoreName = s.Name
}
into grp
select new
{
StoreName = grp.Key.StoreName,
TotalValue = ???
}).ToList();
当您执行组加入时,所有与门店相关的订单都将在组中,并且您将有权访问门店对象。因此,只需使用
s.Name
获取门店名称,并使用g.Sum()
计算订单总数:
var lj = (from s in db.stores
join o in db.orders on s.Code equals o.StoreCode into g
select new {
StoreCode = s.Name,
TotalValue = g.Sum(x => x.TotalValue)
}).ToList();
注意-从您的示例来看,似乎不需要按存储名称和代码进行分组,因为代码看起来像主键,并且不太可能有多个存储具有相同的主键但名称不同。您可以使用lambda进行翻译吗?