Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET GroupBy LINQ语句_Vb.net_Linq_Group By - Fatal编程技术网

VB.NET GroupBy LINQ语句

VB.NET GroupBy LINQ语句,vb.net,linq,group-by,Vb.net,Linq,Group By,我很难把这件事做好。我有一个名为Items的列表(MyItem),上面有一个OrderId属性。从这些项目中,我想创建一个Orders的列表。有些项目将具有相同的OrderId,因此我想尝试按OrderId进行分组。然后我想按日期排序。以下是我目前掌握的情况: Public ReadOnly Property AllOrders() As List(Of Order) Get Return Items.Select(Function(i As MyItem) New O

我很难把这件事做好。我有一个名为
Items
列表(MyItem)
,上面有一个
OrderId
属性。从这些项目中,我想创建一个
Order
s的列表。有些项目将具有相同的
OrderId
,因此我想尝试按
OrderId
进行分组。然后我想按日期排序。以下是我目前掌握的情况:

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.iGroup(的顺序,顺序)”类型的值无法转换为“System.Collections.Generic.List(的顺序)”

我已经将我认为问题所在的部分加粗,但我不知道如何解决它。另外,在我添加
.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 现有项目列表获取列表并将其转换为 列表(我的项目):列表(顺序): ItemId OrderId OrderId 1 100 100 2 102 102 3 100
通过将OrderBy放在GroupBy之后,可以指示它对组进行排序。一组订单没有一个日期。我在想你可能想做的是切换OrderBy和GroupBy;除非GroupBy丢失任何先前的排序顺序,否则您必须对每个组进行排序

这在我看来也是错误的

.GroupBy(Function(o As Order) New Order(o.OrderID))
难道不是吗

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

我说了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 公共只读属性AllOrders()作为列表(顺序) 得到 Dim id=Items.Select(函数(i作为OrderItem)i.OrderID.Distinct() 将订单调整为新的订单列表(订单) 对于ID中作为整数的每个i 订单.添加(新订单(i)) 下一个 returnorders.OrderBy(函数(o As Order)o.DateOrdered).ToList 结束 端属性
如果有人有林奇尔的方法,我更愿意这样做。否则,我想这一块乱七八糟的东西就只能这样了。

你不需要使用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

所以我尝试了以下方法:
Dim orders As List(Of Order)=Items.Select(Function(i As MyItem)New Order(i.OrderID)).OrderBy(Function(o As Order)o.dateorder.GroupBy(Function(o As Order)o.OrderID).ToList
得到了与上面类似的错误:type'System.Collections.Generic.List(Of System.Linq.IGrouping(Of Integer,Order))'无法转换为'System.Collections.Generic.List(顺序))'好的,可以。您正在尝试(使用List()子句)将I组列表转换为顺序列表。整数只是iGroup的关键。显然,现在您已经编辑了您的问题,很明显,您试图做的事情首先与GroupBy无关,这就解释了我们的混淆。具有相同orderid的项目是否具有相同的日期?这些项目没有日期。基本上,我使用items列表获取OrderID以生成正确的订单,但我不希望重复。我觉得我让事情变得更难了:\所以你真的只想要一个唯一OrderID的列表吗?是的。但我想用它们来创建订单谢谢!我不知道你可以在那里放一个
Distinct
。还有,我不知道你会这样。再次感谢:)我同意杰夫的方法。我将把这个放在这里,作为达到同样目的的替代方法。