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 来自多组嵌套集合的Linq查询_Vb.net_Linq - Fatal编程技术网

Vb.net 来自多组嵌套集合的Linq查询

Vb.net 来自多组嵌套集合的Linq查询,vb.net,linq,Vb.net,Linq,我对林克有点陌生。我试图查询分布在多个包含项之间的项集合。 基本上,我正在尝试对嵌套集合中的项运行嵌套查询,这些项是根据某些条件选择的 这里有一个例子,我提出了一个有点丑陋的方法,实现了这个结果 数据项: Class qItem Property qName As String Property qStrings As List(Of String) End Class 填充的集合: Dim qItems As New List(Of qItem) qItems.Add(Ne

我对林克有点陌生。我试图查询分布在多个包含项之间的项集合。 基本上,我正在尝试对嵌套集合中的项运行嵌套查询,这些项是根据某些条件选择的

这里有一个例子,我提出了一个有点丑陋的方法,实现了这个结果

数据项:

Class qItem
    Property qName As String
    Property qStrings As List(Of String)
End Class
填充的集合:

Dim qItems As New List(Of qItem)

qItems.Add(New qItem With {.qName = "Name1", .qStrings = New List(Of String) From {"3243", "324239", "f3f235423"}})
qItems.Add(New qItem With {.qName = "Name2", .qStrings = New List(Of String) From {"3243", "324239", "f3f235423"}})
qItems.Add(New qItem With {.qName = "Name1", .qStrings = New List(Of String) From {"3243r33", "3gfh465239", "r2r23r"}})
qItems.Add(New qItem With {.qName = "Name1", .qStrings = New List(Of String) From {"32f3f3f43", "324239", "f3f235423"}})
以及“丑陋”的问题:

这是否可以在不为每个循环运行手册的情况下完成,从而聚合来自不同
qstring
的所有项? 为了实现这一点,我假设,我需要以某种方式对我的收藏中的所有不同项目
qitems
执行
From


本质上,对于结果,我需要从多个
qItem
obejcts查询的
q.qStrings
字符串集合。我该怎么做?

您可以扩展它,基本上添加(
)将继续
Where
子句

在您的示例中,
qStrings
qItem
的一个属性,您希望查询包含
“f3”的
qStrings

如果
qItem
具有附加属性,如
int Id
,并希望按1筛选它

From q In qItems Where q.qName = "Name1" And q.qStrings.Contains("f3") And q.Id = 1

您可以扩展它,基本上添加(
)将继续
Where
子句

在您的示例中,
qStrings
qItem
的一个属性,您希望查询包含
“f3”的
qStrings

如果
qItem
具有附加属性,如
int Id
,并希望按1筛选它

From q In qItems Where q.qName = "Name1" And q.qStrings.Contains("f3") And q.Id = 1

经过更多的挖掘,我找到了我想要的答案
事实证明,您可以从
语句嵌套链
。我也不熟悉
Select
<因此,最后,我的案例的有效解决方案就这么简单

Dim finalQuery = From q In qItems Where q.qName = "Name1"
                 From s In q.qStrings
                 Select s Where s.Contains("f3")
为了获得更一般的集合,可以在末尾添加转换

Dim finalQuery = (From q In qItems Where q.qName = "Name1"
                 From s In q.qStrings
                 Select s Where s.Contains("f3")).ToList

经过更多的挖掘,我找到了我想要的答案
事实证明,您可以从
语句嵌套链
。我也不熟悉
Select
<因此,最后,我的案例的有效解决方案就这么简单

Dim finalQuery = From q In qItems Where q.qName = "Name1"
                 From s In q.qStrings
                 Select s Where s.Contains("f3")
为了获得更一般的集合,可以在末尾添加转换

Dim finalQuery = (From q In qItems Where q.qName = "Name1"
                 From s In q.qStrings
                 Select s Where s.Contains("f3")).ToList

添加了一个答案添加了一个答案谢谢。这是另一种更简单的方法。但对于最终结果,我仍然需要一个字符串集合,而不是包含字符串集合的对象集合。在这个查询之后,我仍然需要为每个等价物运行一个,以便从不同的
qItem
s的每个
q.qstring
构建最终集合。我在想,也许有一种更优雅的方法可以同时做到这一点,比如嵌套查询。除此之外,这并不能满足我的需要。部分
q.qStrings.Contains(“f3”)
检查集合是否包含字符串项“f3”,但我需要检查字符串项是否包含子字符串“f3”。谢谢。这是另一种更简单的方法。但对于最终结果,我仍然需要一个字符串集合,而不是包含字符串集合的对象集合。在这个查询之后,我仍然需要为每个等价物运行一个,以便从不同的
qItem
s的每个
q.qstring
构建最终集合。我在想,也许有一种更优雅的方法可以同时做到这一点,比如嵌套查询。除此之外,这并不能满足我的需要。部分
q.qStrings.Contains(“f3”)
检查集合是否包含字符串项“f3”,但我需要检查字符串项是否包含子字符串“f3”。我相信您仍需要迭代finalQuery
Dim finalQuery=(从qItems中的q开始,其中q.qName=“Name1”从q.qStrings中的s开始,选择s.Contains(“f3”)。ToList
将为您提供一个(字符串)列表,您可以立即访问该列表,而不是IEnumerable。是的,这是真的。编辑答案以获得更完整的信息。我相信您仍然需要迭代finalQuery
Dim finalQuery=(从qItems中的q开始,其中q.qName=“Name1”从q.qStrings中的s开始,选择s.Contains(“f3”)。ToList
将为您提供一个(字符串)列表,您可以立即访问该列表,而不是IEnumerable。是的,这是真的。编辑答案以获取更完整的信息。