Linq select 基于子 table 数据的记录
Linq select a record based on child table data
尝试根据存储在另一个 table 中的当前状态来 select 订单。继续获取所有订单,而不是按当前状态过滤的订单。当状态不为空时,查询应该根据订单的最新状态进行过滤,我认为应该是按记录日期降序排列的状态,取第一个状态。
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;
}
table 中还有更多字段,为简洁起见我省略了。
order_tbl
id date customerId
1 2/1/2018 6
2 2/3/2018 5
3 2/6/2018 3
order_status
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' 上搜索时,查询将 return 订购 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);
}
尝试根据存储在另一个 table 中的当前状态来 select 订单。继续获取所有订单,而不是按当前状态过滤的订单。当状态不为空时,查询应该根据订单的最新状态进行过滤,我认为应该是按记录日期降序排列的状态,取第一个状态。
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;
}
table 中还有更多字段,为简洁起见我省略了。
order_tbl
id date customerId
1 2/1/2018 6
2 2/3/2018 5
3 2/6/2018 3
order_status
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' 上搜索时,查询将 return 订购 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);
}