C# 将sql语句转换为linq时出现问题
我已经通读了101个linq样本,它们似乎有我正在尝试做的部分,但在组合它们时遇到了困难。我有一个类似这样的查询,它将我的“客户”与一些“订单”值(例如,所有订单的总数和订单数量)关联起来 我知道如何进行左外连接,但我确实看到了不分组求和的方法?我看不到任何将求和分组然后将此结果返回到另一个select的示例C# 将sql语句转换为linq时出现问题,c#,sql,linq,C#,Sql,Linq,我已经通读了101个linq样本,它们似乎有我正在尝试做的部分,但在组合它们时遇到了困难。我有一个类似这样的查询,它将我的“客户”与一些“订单”值(例如,所有订单的总数和订单数量)关联起来 我知道如何进行左外连接,但我确实看到了不分组求和的方法?我看不到任何将求和分组然后将此结果返回到另一个select的示例 var x = from c in db.Customers join o in db.Orders on c.UserID equals o.UserID into o
var x =
from c in db.Customers
join o in db.Orders on c.UserID equals o.UserID into oo
from o in oo.DefaultIfEmpty()
select new { FirstName = c.FirstName, SUM??(o.Total), };
在这一点上,我似乎只是在转动我的轮子。任何帮助都将不胜感激。您可以在加入后执行
分组。结果应该完全相同:
var x = from c in db.Customers
join o in db.Orders on c.UserID equals o.UserID into oo
from o in oo.DefaultIfEmpty()
group new { c, o } by c.UserID into g
select new {
Customer = g.FirstOrDefault().c,
Total = g.Sum(x => x.o.Total)
Count = g.Select(x => x.o.OrderId).Distinct().Count()
};
g、 计数(x=>x.o.OrderID…这需要一个布尔值…我不确定测试条件是什么,因为我只需要一个行数。我已经更新了答案,但我不确定它是否能正确转换为SQL。太棒了,谢谢。我必须做一个更改来过滤掉空值,因为我总是得到至少1个返回顺序。不确定这是否是fastest-way:ordersont=g.Where(p=>p.o.OrderID!=null)。选择(x=>x.o.OrderID)。Distinct().Count()您可以尝试将谓词移动到Count
:ordersont=g.Select(x=>x.o.OrderID)。Distinct().Count(p=>p.o.OrderID!=null)
您是linq主控器。对您上次的编辑进行了一个小的更正。因为此时它只有值,所以我更改为:ordersont=g.Select(x=>x.o.OrderID).Distinct().Count(x=>x!=null)
var x = from c in db.Customers
join o in db.Orders on c.UserID equals o.UserID into oo
from o in oo.DefaultIfEmpty()
group new { c, o } by c.UserID into g
select new {
Customer = g.FirstOrDefault().c,
Total = g.Sum(x => x.o.Total)
Count = g.Select(x => x.o.OrderId).Distinct().Count()
};