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 什么';返回集合集合的语法是什么?_Vb.net_Linq - Fatal编程技术网

Vb.net 什么';返回集合集合的语法是什么?

Vb.net 什么';返回集合集合的语法是什么?,vb.net,linq,Vb.net,Linq,下面的代码显示了我如何尝试返回对象集合的集合。使用基于lambda的LINQ语法,我得到了我想要的。使用“自然语言”语法,我不会;我得到一个扁平的物体集合。获取集合的术语是什么 Option Strict On Sub Main Dim i As Integer Dim j As Integer Dim l As List(Of List(Of MyPoint)) = New List(Of List(Of MyPoint)) For j = 1 To 2

下面的代码显示了我如何尝试返回对象集合的集合。使用基于lambda的LINQ语法,我得到了我想要的。使用“自然语言”语法,我不会;我得到一个扁平的物体集合。获取集合的术语是什么

Option Strict On

Sub Main

    Dim i As Integer
    Dim j As Integer
    Dim l As List(Of List(Of MyPoint)) = New List(Of List(Of MyPoint))
    For j = 1 To 2
        Dim ll = New List(Of MyPoint)
        For i = 1 To 10
            ll.Add(New MyPoint(i,j))
        Next
        l.Add(ll)
    Next

    Dim q1 = l.Select(Function (ll) ll.Select(Function (p) New MyPoint(p.x+1, p.y+1)))

    Dim q2 = From ll In l From p In ll Select New MyPoint(p.x + 1, p.y + 1)



End Sub

Public Class MyPoint
    Public Property X As Integer
    Public Property Y As Integer
    Sub New(i As Integer, j As Integer)
        X = i
        Y = j
    End Sub
End Class

编辑:使用real类而不是匿名类型,Option Strict On,这样您就可以专注于实际问题而不是与我争论。

您有两个
在第一个问题中选择
s。您还需要两个
在第二个中选择
s;
(我重命名了一些内容,以便更容易阅读)


您有两个
在第一个中选择
s。您还需要两个
在第二个中选择
s;
(我重命名了一些内容,以便更容易阅读)


您显示为“返回我想要的”的内容甚至不会编译(使用选项Strict),因为您声明了一个
列表(列表(对象))
,但随后您选择了
p.x
,就好像每个对象都有
x
属性一样。这只适用于后期绑定。为什么您仍然使用
选项Strict Off
?“这不会返回我想要的内容”好吧,它会返回什么内容?@TimSchmelter是正确的,它只是因为后期绑定才起作用,打开
选项Strict On
,他是您的朋友。。。另外,为什么
List(Of List(Of Object))
当您清楚地使用
Integer
类型时,为什么不显式地添加您正在使用的类型呢?这个一次性代码是在LinqPad中专门提出这个问题的。我的实际代码甚至不使用匿名类型。我认为这个问题不需要关注
选项Strict
@Codexer就可以回答。我不想要
列表(整数的列表))
;我想要一个
列表(列表(其他类型的)
。在这个一次性代码中,这是一个匿名类型。在生产中,它恰好是
WebSupergoo.ABCPdf.XPoint
。如果我在这里使用它对您来说更清楚,即使您不能为自己编译它,除非您拥有该库,那么我可以进行更改。您显示为“返回我想要的”的内容甚至不能编译(使用选项Strict),因为您声明了一个
列表(列表(对象的))
但然后选择
p.x
,就像每个对象都有
x
属性一样。这只适用于后期绑定。为什么您仍然使用
选项Strict Off
?“这不会返回我想要的内容”好吧,它会返回什么内容?@TimSchmelter是正确的,它只是因为后期绑定才起作用,打开
选项Strict On
,他是您的朋友。。。另外,为什么
List(Of List(Of Object))
当您清楚地使用
Integer
类型时,为什么不显式地添加您正在使用的类型呢?这个一次性代码是在LinqPad中专门提出这个问题的。我的实际代码甚至不使用匿名类型。我认为这个问题不需要关注
选项Strict
@Codexer就可以回答。我不想要
列表(整数的列表))
;我想要一个
列表(列表(其他类型的)
。在这个一次性代码中,这是一个匿名类型。在生产中,它恰好是
WebSupergoo.ABCPdf.XPoint
。如果我在这里使用它,你会更清楚,即使你不能为自己编译它,除非你拥有那个库,那么我可以做出改变。谢谢!这确实回答了我的问题。因此,作为后续,我们要问一个相反的问题:基于lambda的语法是什么,只相当于一个Select?会很多吗?谢谢!这确实回答了我的问题。因此,作为后续,我们要问一个相反的问题:基于lambda的语法是什么,只相当于一个Select?会有很多吗?
Dim i As Integer, j As Integer
Dim listOfLists As List(Of List(Of Point)) = New List(Of List(Of Point))
For j = 1 To 2
    Dim ll = New List(Of Point)
    For i = 1 To 10
        ll.Add(New Point With {.x = i, .y = j})
    Next
    listOfLists.Add(ll)
Next

' This returns what I want    
Dim q1 = listOfLists.Select(Function(ll) ll.Select(Function(p) New With {.x = p.x + 1, .y = p.y + 1}))

Dim q2 = From thisList In listOfLists 
          Select From pnt In thisList 
                 Select New Point With {.x = pnt.x + 1, .y = pnt.y + 1}