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 使用TryCast强制转换匿名类型LINQ不会返回任何结果_Vb.net_Linq - Fatal编程技术网

Vb.net 使用TryCast强制转换匿名类型LINQ不会返回任何结果

Vb.net 使用TryCast强制转换匿名类型LINQ不会返回任何结果,vb.net,linq,Vb.net,Linq,我希望我的查询返回(服务)列表,然后我希望使用新列表进行进一步筛选 当我运行此查询时,它会正确执行 Dim duplicateService = svgGrpContainer.GroupBy(Function(x) x.ServiceGroup).Where(Function(x) x.Count > 1).Select(Function(x) x) 我现在正试图将其转换为使用它并创建另一个查询 Dim duplicatePAK = duplicateServiceGroups

我希望我的查询返回(服务)列表,然后我希望使用新列表进行进一步筛选

当我运行此查询时,它会正确执行

Dim duplicateService = svgGrpContainer.GroupBy(Function(x) x.ServiceGroup).Where(Function(x) x.Count > 1).Select(Function(x) x)
我现在正试图将其转换为使用它并创建另一个查询

    Dim duplicatePAK = duplicateServiceGroups.GroupBy(Function(x) x.Name).Where(Function(x) x.Count > 1).Select(Function(x) x)
当我抛出第一个查询时,它现在什么也不返回

 Dim duplicateService As List(Of ServiceGroup) = TryCast(svgGrpContainer.GroupBy(Function(x) x.ServiceGroup).Where(Function(x) x.Count > 1).Select(Function(x) x), List(Of ServiceGroup))
ToList抛出了一个分组异常,我试过了


如何转换查询,以便在后续查询中进一步筛选数据?或者使用1查询并按组和名称分组?

在执行LINQ操作后,您将得到一个
IEnumerable
。试着改用
.ToList()
,但是你有一个分组,你必须弄清楚需要在那里做什么-这取决于你的逻辑决定。

内部查询当前正在返回
i分组(服务组的,T)
IEnumerable
,这就是为什么它不会转换为
IEnumerable(服务组的)
。不要选择整个
i分组
,而是选择每个分组的
。这将为您提供一个
IEnumerable(服务组的)

Dim duplicateService As List(Of ServiceGroup) = svgGrpContainer.
                                            GroupBy(Function(x) x.ServiceGroup).
                                            Where(Function(x) x.Count > 1).
                                            Select(Function(x) x.Key).
                                            ToList()

GroupBy
方法不返回
IEnumerable(of T)
,它返回
IEnumerable(of IGrouping(of TKey,T))

在您的情况下,您从初始查询中得到的是
IEnumerable(关于IGrouping(关于ServiceGroup,Service))
,其中每个
IGrouping
本身就是一个
Service
对象列表,按
ServiceGroup
键分组

根据第二个查询(也包括分组)的目标,这里有几个选项

一个选项是在第一个查询中使用
SelectMany
,以“展平”列表;这将使您返回一个
IEnumerable(of Service)
,但在此过程中,您将失去
ServiceGroup
的分组。这可能没问题:如果您只使用第一组按
计数进行筛选,并且不再需要它,那么此选项应该适用于您。我相信它会像这样简单(因为
I分组
实现了
IEnumerable
):


如果您试图完成的是将您的服务按
ServiceGroup
分组,然后在每个服务组内按
Name
分组,那么我不知道如何在两个单独的查询中进行分组。就我个人而言,我可能只是循环我的第一个结果,然后建立第二组,一次一组,因为这比你想到的任何LINQ混乱都要清楚得多。如果你真的需要这个结果,请告诉我,我会看看我能想出什么。

这里有一个.net的工作解决方案(请原谅C#)

c#: vb.net:

您需要使用匿名对象按多个字段分组,然后使用SelectMany将列表展平

主要思想是

    Dim duplicates As List(Of Thing) = 
        things.
            GroupBy(Function(thing) New With {Key .Name = thing.Name, Key .ServiceGroup = thing.ServiceGroup }).
            Where(Function(group) group.Count() > 1).
            SelectMany(Function(group) group.ToList).
            ToList()

我可以在一个查询中按组和名称分组吗?我相信他想要的是一个
列表(服务)
。您可以选择
x.ToList()
,但这将为您提供一个
IEnumerable(of List(of Service))
并销毁分组。我只需要具有相同组和名称的组。你能在vb.net中显示这个吗?我有麻烦了converting@NickLaMarca当然,一秒钟后,我收到一个编译错误。.类型为'System.Collections.Generic.List(of System.Collections.Generic.List(of m02Auth.ServiceGroup))'的值不能转换为'System.Collections.Generic.List(of m02Auth.ServiceGroup)'嗯,可能是我的vb.net(我是c#guy)。让我也更新一下提琴,以确保它能正常工作。如果我保持匿名,它就能编译并正常工作。ThanksAll I want是一个具有相同组和名称的结果如何在
svgGrpContainer
中说
ServiceGroup
重复?例如,此
Name
属性如果重复,则表示重复?
    Dim duplicates As List(Of Thing) = 
        things.
            GroupBy(Function(thing) New With {Key .Name = thing.Name, Key .ServiceGroup = thing.ServiceGroup }).
            Where(Function(group) group.Count() > 1).
            SelectMany(Function(group) group.ToList).
            ToList()