【发布时间】:2018-08-10 15:47:57
【问题描述】:
目标是从实体(外键)的集合中获取第一个 DateTime 和 Last DateTime。我的实体是一个组织,我的收藏是发票。我正在对结果进行分组,因为不幸的是组织不是唯一的。我正在处理重复数据,不能假设我的组织是唯一的,因此我按我的实体上的数字字段进行分组。
我正在使用 .NET Core 2.1.2 和 Entity Framework。
我正在尝试从 LINQ 生成以下查询:
SELECT MIN([organization].[Id]) AS Id, MIN([organization].[Name]) AS Name,
MIN([organization].[Number]) AS Number, MIN([invoice].[Date])
AS First, MAX([invoice].[Date]) AS Last
FROM [organization]
INNER JOIN [invoice] ON [invoice].[OrganizationId] = [organization].[Id]
GROUP BY [organization].[Number], [organization].[Name]
ORDER BY [organization].[Name]
但是我不知道如何编写 LINQ 查询以使其生成此结果。
我知道了:
await _context
.Organization
.Where(z => z.Invoices.Any())
.GroupBy(organization => new
{
organization.Number,
organization.Name
})
.Select(grouping => new
{
Id = grouping.Min(organization => organization.Id),
Name = grouping.Min(organization => organization.Name),
Number= grouping.Min(organization => organization.Number),
//First = ?,
//Last = ?
})
.OrderBy(z => z.Name)
.ToListAsync();
我不知道如何以生成上述内容的方式编写 LINQ 查询。
我还有几个问题:
- 对于 Id、Name 和 Number 的 Min 语句是否正确获取 分组中的第一个元素?
- 我需要加入语句还是“WHERE EXISTS”更好(这是在我更改代码之前生成的)?
有人知道如何完成 LINQ 语句的编写吗?因为我必须从我的组织实体的发票集合中获取第一个和最后一个日期:
organization.Invoices.Min(invoice => invoice.Date)
organization.Invoices.Max(invoice => invoice.Date)
【问题讨论】:
-
在 EF Core 中搜索加入
-
请参阅下面的回复。这就是我一直在寻找的东西。我还不知道 LINQ 如何很好地转换为 SQL。 Ivan Stoev 在下面的回答会生成一个内部连接并执行我需要它执行的操作。
标签: c# linq .net-core entity-framework-core