【发布时间】:2021-11-07 21:44:22
【问题描述】:
我正在尝试将 SQL 查询转换为 Linq,但我不确定是否有办法编写此查询。此外,此查询仅从 CartonDetails 表中获取匹配值,但我需要 Carton 表中的所有值。
select Carton.Id,
Carton.CartonNumber,
COUNT(CartonDetail.CartonId) as TotalCount
from Carton
Inner Join CartonDetail on CartonDetail.CartonId = Carton.Id
Group by Carton.Id, Carton.CartonNumber
这就是我到目前为止所拥有的。我是 Linq 的新手。提前致谢
var apv = db.Cartons.Where(c => c.CartonDetails.Select(cd => cd.CartonId).Contains(c.Id)).GroupBy(c => c.Id, c => c.CartonNumber).Select(c => new CartonViewModel
{
Id = c.Key,
EquipmentCount = c.Count(),
// How can i select the Carton Number here.
});
return View(cartons);
}
CartonDetail.cs
[Table("CartonDetail")]
public partial class CartonDetail
{
public int Id { get; set; }
public int CartonId { get; set; }
public int EquipmentId { get; set; }
public Carton Carton { get; set; }
public Equipment Equipment { get; set; }
}
【问题讨论】:
-
这能回答你的问题吗? Group By Multiple Columns
-
旁注:
COUNT(CartonDetail.CartonId)将计算CartonId的非空值。如果是不可为空的列,则与COUNT(*)或COUNT(1)相同 -
为什么要在two accounts下运营?
-
如果从 LINQ 查询中删除连接并将其转换为导航属性,则不需要分组。请阅读如何做到这一点here。它将简化您在 EF 中所做的一切。
标签: c# sql entity-framework linq linq-to-sql