【发布时间】:2021-06-18 20:11:33
【问题描述】:
我有 2 个表 Outlet 和 Order 具有以下架构:
Outlet Order
------ -------------------
Id Id
Name Name
OrderCompletedTime
NextOrderDueTime
OutletIds
早些时候,当我想使用实体框架核心为每个出口获取 NextOrderDueTime 时,我做了:
return _dbAccessor.RequestContext.MyDbContext.Order
.Where(i => i.OutletId == _dbAccessor.RequestContext.OutletId &&
!i.IsRemoved && i.NextOrderDueTime.HasValue)
.GroupBy(i => i.OutletId)
.Select(g => new { OutletId = g.Key, NextOrderDueTime = g.Min(x => x.NextOrderDueTime) })
.ToDictionary(i => i.OutletId, i => i.NextOrderDueTime);
现在在 UI 上,我们需要将此到期时间作为链接,并希望用户根据订单 ID 导航到该订单详细信息页面
如何更改上述查询以同时返回 OrderId 以及时间?
我的想法:
-
将方法的返回类型从
Dictionary<int, DateTimeOffset?>更改为Dictionary<int, Tuple<int,DateTimeOffset?>> -
我尝试将 Linq 查询更改为:
return _dbAccessor.RequestContext.MyDbContext.Order
.Where(i => i.OutletId == _dbAccessor.RequestContext.OutletId &&
!i.IsRemoved && i.NextOrderDueTime.HasValue)
.GroupBy(i => i.OutletId)
.Select(g =>
new
{
OutletId = g.Key,
NextOrderDueTime = g.FirstOrDefault(x => x.NextOrderDueTime == g.Min(y => y.NextOrderDueTime)).NextOrderDueTime,
NextOrderId = g.FirstOrDefault(x => x.NextOrderDueTime == g.Min(y => y.NextOrderDueTime)).OrderId
})
.ToDictionary(i => i.OutletId, i => new Tuple<int, DateTimeOffset?>(i.NextOrderId, i.NextOrderDueTime));
但这会在运行时引发异常?
请帮助让我知道我在这里做错了什么。
【问题讨论】:
标签: c# linq .net-core entity-framework-core