linq - LINQ - 左连接和分组依据
问题描述
我有个问题。这是我的产品类
public int ProductID { get; set; }
public string ProductName { get; set; }
public int CategoryID { get; set; }
public decimal Price { get; set; }
public int CompanyID { get; set; }
public string QuantityPerUnit { get; set;
这是 OrderDetail 类
public int DetailID { get; set; }
public int OrderID { get; set; }
public int ProductID { get; set; }
public decimal UnitPrice { get; set; }
public int Quantity { get; set; }
public bool Discount { get; set; }
所以我在 mssql 中写了这个查询。那么,如何在 linq 上编写此查询?
select Products.ProductID, Sum(OrderDetails.Quantity) as 'NumberOfOrdered' from Products
left join OrderDetails on Products.ProductID = OrderDetails.ProductID
group by Products.ProductID
order by Products.ProductID
我写了这个查询,但它不起作用。
from p in _context.Products
join d in _context.OrderDetails on p.ProductsID equals d.ProductsID into t1
from d1 in t1.DefaultIfEmpty()
group new { p, d } by new { p.ProductsID, d.ProductsID } into g
orderby g.Key.ProductsID
select new ProductsOrderDetails
{
ProductsID = g.Key.ProductsID,
QuantityToplam = g.(x=>x.d.Quantity)
}).ToList();
解决方案
所以你有Products
和OrderDetails
。每一个Product
都有零个或多个OrderDetails
,每一个OrderDetail
都是恰好一个的细节Product
,即属于的Product
那个。OrderDetail.ProductId
要求:从 everyProduct
中,给我 Id 和所有它的 Quantities 的总和OrderDetails
每当您需要项目序列时,每个项目及其子项目,例如学校及其学生,作者及其书籍,订单及其 OrderDetails,请考虑使用Enumerable.GroupJoin的重载之一
在这种情况下,我不想要一个带有 OrderDetails 的简单产品,我想编写一个特殊的结果。对于每个产品,我想要其所有 OrderDetauls 的 Id 和数量之和。因此,我使用带参数的重载resultSelector
。
var result = dbContext.Products.GroupJoin( // GroupJoin Products
dbContext.OrderDetails, // with Orderdetails
product => product.Id, // From every Product take the Id
orderDetail => orderDetail.ProductId, // From every OrderDetail that the foreign key
// resultSelector: for every Product and all its zero or more OrderDetails
// create one new object
(product, orderDetailsOfThisProduct) => new
{
Id = product.Id,
QuantitiesToPlam = orderDetailsOfThisProduct
.Select(orderDetail => orderDetail.Quantity)
.Sum(),
});
对于属性 QuantitiesToPlam:对于属于该产品的每个 OrderDetail:取属性 Quantity 的值,并将它们求和。
推荐阅读
- r - R Leaflet - addPolylines - 不断添加区域名称
- javascript - Ajaxmin MinifyJavascript 在对象前添加 {}
- javascript - reCaptcha 是否与 iFrame 兼容?
- c# - 在父元素中覆盖 DataContext 后在子元素中使用 Window DataContext
- azure-devops - 通过 Graph API 更新用户“必须参考服务操作或实体集”
- javascript - selected-js 生成的默认 WIDTH = 0
- mysql - 如何通过colsfusion从ics文件中提取数据?
- sql - 如何根据某个时间范围进行汇总
- ubuntu - Cassandra 内存消耗
- javascript - 我如何使用 wrld.js 映射区域中的平移边界