代码之家  ›  专栏  ›  技术社区  ›  Jason

VB.NET GroupBy LINQ语句

  •  1
  • Jason  · 技术社区  · 16 年前

    我要花很长时间才能把这件事做好。我有一个 List(Of MyItem) Items 有一个 OrderId 他们的财产。从这些项目中,我想创建一个 Order s。某些项目将具有相同的 医嘱ID 所以我想试着分组 . 然后我想按日期排序。以下是我目前掌握的情况:

    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
    

    “System.Collections.Generic.List”类型的值(属于System.Linq.IGrouping)( 秩序,秩序 秩序 ))'

    .GroupBy 声明。有人有什么想法吗?

    谢谢

    基本上,我想要这个:

    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
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   Geoff Appleford    16 年前

    你不需要使用分组方式。

    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
    

    如果要按order上的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
    
        2
  •  0
  •   pdr    16 年前

    通过将OrderBy放在GroupBy之后,可以指示它对组进行排序。一组订单没有一个日期。我在想你可能想做的是切换OrderBy和GroupBy;除非GroupBy丢失任何先前的排序顺序,否则您必须对每个组进行排序。

    这在我看来也是不对的

    .GroupBy(Function(o As Order) New Order(o.OrderID))
    

    .GroupBy(Function(o As Order) o.OrderID)
    
        3
  •  0
  •   Jason    16 年前

    我说了F,然后用了一些不太漂亮的代码:

    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
    

    如果有人有林奇尔的方法,我宁愿这样做。否则,我想这一堆乱七八糟的东西就只能这样了。