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进行翻译吗?