我有一段时间让这个工作。我有一个名为List(Of MyItem)
的{{1}},其上有Items
个属性。从这些项目中,我想创建一个OrderId
的列表。有些项目具有相同的Order
,因此我想尝试按OrderId
进行分组。然后我想按日期排序。这是我到目前为止所做的:
OrderId
当然,这不会编译,我收到错误:
类型'System.Collections.Generic.List(Of System.Linq.IGrouping( Of Order,Order ))'的值无法转换为'System.Collections.Generic.List(< strong> Of Order ))'
我认为问题所在的部分是粗体,但我不知道如何修复它。此外,在我添加Public ReadOnly Property AllOrders() As List(Of Order)
Get
Return Items.Select(Function(i As MyItem) New Order(i.OrderID)) _
.GroupBy(Function(o As Order) New Order(o.OrderID)) _
.OrderBy(Function(o As Order) o.DateOrdered).ToList
End Get
End Property
语句之前,它曾经工作正常(除了有重复的值)。有人有什么想法吗?
由于
修改
基本上,我想要这个:
List of Existing Items Take List and Turn it into List(Of MyItem): List(Of Order): ItemId OrderId OrderID 1 100 100 2 102 102 3 100
答案 0 :(得分:3)
您不需要为此使用group by。
Public ReadOnly Property AllOrders() As List(Of Order)
Get
Return Items.Select(Function(i) i.OrderID).Distinct.Select(Function(p) New Order(p)).ToList()
End Get
End Property
如果您想通过订单上的OrderedDate订购,只需在ToList
之前添加orderby子句Public ReadOnly Property AllOrders() As List(Of Order)
Get
Return Items.Select(Function(i) i.OrderID).Distinct _
.Select(Function(p) New Order(p)) _
.OrderBy(Function(s) s.DateOrdered).ToList()
End Get
End Property
答案 1 :(得分:0)
通过在GroupBy之后放置OrderBy,您指示它对组进行排序。一组订单没有单一日期。我在想你可能想要做的是切换OrderBy和GroupBy;除非GroupBy丢失任何先前的排序顺序,在这种情况下,您将必须对每个组进行排序。
这对我来说也是错误的
.GroupBy(Function(o As Order) New Order(o.OrderID))
不应该
.GroupBy(Function(o As Order) o.OrderID)
答案 2 :(得分:0)
我说它并使用了一些不太漂亮的代码:
Public ReadOnly Property AllOrders() As List(Of Order) Get Dim ids = Items.Select(Function(i As OrderItem) i.OrderID).Distinct() Dim orders As New List(Of Order) For Each i As Integer In ids orders.Add(New Order(i)) Next Return orders.OrderBy(Function(o As Order) o.DateOrdered).ToList End Get End Property
如果有人有LINQier方式,我宁愿这样做。否则,我想这片kludge将不得不做。