linq - Linq 根据子表数据选择一条记录
问题描述
尝试根据存储在另一个表中的当前状态选择订单。继续获取所有订单,而不是按当前状态过滤的订单。当状态不为空时,查询应根据订单的最新状态进行过滤,我认为该状态应该是按记录日期降序排列的第一个状态。
private IQueryable<order_tbl> CreateQuery(string status, int? orderId, DateTime? orderDate) {
var query = from o in context.order_tbl select o;
if (orderId.HasValue) query = query.Where(w => w.id.Equals(orderId.Value));
if (orderDate.HasValue) query = query.Where(w => w.OrderDate.Equals(orderDate.Value));
if (!string.IsNullOrEmpty(status)) {
query = (from q in query
from s in q.order_status
.OrderByDescending(o => o.DateStatusUpdated)
.Take(1)
.Where(w => w.Status.Equals(status))
select q);
}
return query;
}
为简洁起见,我省略了表格中的更多字段。
order_tbl
id date customerId
1 2/1/2018 6
2 2/3/2018 5
3 2/6/2018 3
订单状态
id orderId DateStatusUpdated status
1 1 2/1/2018 open
2 1 2/2/2018 filled
3 2 2/3/2018 open
4 2 2/4/2018 filled
5 3 2/6/2018 open
仅在“open”上搜索时,查询将返回订单 1、2、3,而不仅仅是订单 3。关于状态的查询有什么问题?
解决方案
这个答案为我指明了正确的方向,LINQ Query - Only get Order and MAX Date from Child Collection
将我的查询修改为以下内容。
if (!string.IsNullOrEmpty(status)) {
{
query = query
.SelectMany(s => s.order_status
.OrderByDescending(o => o.DateStatusUpdated)
.Take(1)
)
.Where(w => w.Status.Equals(status))
.Select(s => s.order_tbl);
}
推荐阅读
- javascript - 我正在尝试安装实时服务器,但一直出现此错误
- powershell - Powershell:文件夹浏览器/文件浏览器路径
- python - 不同计算机上的不同 Scikit Learn R^2 结果
- reactjs - 调度一个动作创建函数是如何工作的?
- javascript - select2 返回项目的位置,而不是项目的 ID
- list - 空列表上的 foldMap 时 Haskell 模棱两可的类型变量编译器错误
- python - 如何为文本框创建一个类?
- amazon-web-services - AWS S3 拒绝使用映射域的文件访问
- python - 如何更正 matplotlib 图中重叠的刻度标签
- python - 无法将 JSON 文件中的数据用于日期时间