LINQ to entities:如何 return 客户的最新订单号
LINQ to entites: How to return the latest order number for a customer
假设我们有典型的 Customers
和 Orders
关系,其中一个 Customer
可以有多个 Orders
,而 Orders
包含 CustomerId
作为 FK。
我认为这段代码 return 是最新订单的整个订单实体:
Order latestOrder = (from o in context.Orders
//where conditions or joins to be included here
group o by o.CustomerId into grp
select grp.OrderByDescending(g => g.OrderDate).First())
如何才能 return 仅 string
类型的 OrderNumber
,而不是整个实体? (如果有 none 则为空)
string latestOrderNumber = (?)
谢谢。
您可以尝试这样的操作:
Order latestOrder = (from o in context.Orders
//where conditions or joins to be included here
group o by o.CustomerId into grp
select grp.OrderByDescending(g => g.OrderDate).FirstOrDefault());
最好使用 FirstOrDefault
。如果未找到任何订单,则结果为空。然后检查结果是否不为 null 并且您只读取返回项的 属性。
if(latestOrder!=null)
lastOrdeNumber = lastOrder.OrderNumber;
您需要在 First()
之前调用 Select(g => g.OrderNumber)
并且您需要再次调用 FirstOrDefault
以检索单个 OrderNumber
而不是 IQueryable<string>
string latestOrderNumber = (from o in context.Orders
group o by o.CustomerId into grp
select grp.OrderByDescending(g => g.OrderDate)
.Select(g => g.OrderNumber)
.FirstOrDefault()
).FirstOrDefault();
试试这个。希望对您有所帮助!
var result = context.Orders.OrderByDescending(o => o.OrderDate)
.GroupBy(x => x.CustomerId)
.Select(grp => grp.First().OrderNumber);
假设我们有典型的 Customers
和 Orders
关系,其中一个 Customer
可以有多个 Orders
,而 Orders
包含 CustomerId
作为 FK。
我认为这段代码 return 是最新订单的整个订单实体:
Order latestOrder = (from o in context.Orders
//where conditions or joins to be included here
group o by o.CustomerId into grp
select grp.OrderByDescending(g => g.OrderDate).First())
如何才能 return 仅 string
类型的 OrderNumber
,而不是整个实体? (如果有 none 则为空)
string latestOrderNumber = (?)
谢谢。
您可以尝试这样的操作:
Order latestOrder = (from o in context.Orders
//where conditions or joins to be included here
group o by o.CustomerId into grp
select grp.OrderByDescending(g => g.OrderDate).FirstOrDefault());
最好使用 FirstOrDefault
。如果未找到任何订单,则结果为空。然后检查结果是否不为 null 并且您只读取返回项的 属性。
if(latestOrder!=null)
lastOrdeNumber = lastOrder.OrderNumber;
您需要在 First()
之前调用 Select(g => g.OrderNumber)
并且您需要再次调用 FirstOrDefault
以检索单个 OrderNumber
而不是 IQueryable<string>
string latestOrderNumber = (from o in context.Orders
group o by o.CustomerId into grp
select grp.OrderByDescending(g => g.OrderDate)
.Select(g => g.OrderNumber)
.FirstOrDefault()
).FirstOrDefault();
试试这个。希望对您有所帮助!
var result = context.Orders.OrderByDescending(o => o.OrderDate)
.GroupBy(x => x.CustomerId)
.Select(grp => grp.First().OrderNumber);