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”。我相信您仍需要迭代finalQueryDim finalQuery=(从qItems中的q开始,其中q.qName=“Name1”从q.qStrings中的s开始,选择s.Contains(“f3”)。ToList
将为您提供一个(字符串)列表,您可以立即访问该列表,而不是IEnumerable。是的,这是真的。编辑答案以获得更完整的信息。我相信您仍然需要迭代finalQueryDim finalQuery=(从qItems中的q开始,其中q.qName=“Name1”从q.qStrings中的s开始,选择s.Contains(“f3”)。ToList
将为您提供一个(字符串)列表,您可以立即访问该列表,而不是IEnumerable。是的,这是真的。编辑答案以获取更完整的信息。