在LINQ - VB.NET中聚合不同计数

本文关键字:LINQ VB NET | 更新日期: 2023-09-27 18:17:12

我有一个来自数据库并进入PagedDataSource的数据。数据来自一个查询,该查询提取了大约10条记录,大约20列。根据一个varchar列名"source",我想找到该源的唯一实例。这是一个非常基本的查询。在SQL中,我会这样做:

select count(distinct source) from SourceTable

我尝试了下面的方法,它给出了计数,但没有明显的(或唯一的)计数。

Dim query = Aggregate source In pagedDS
            Into Count()

我不知道如何在LINQ查询中选择列,以及如何通过一列应用聚合。我需要这个在VB。. NET,但c#解决方案应该足够接近。

在LINQ - VB.NET中聚合不同计数

由于PagedDataSource不实现IEnumerable<T>,只是IEnumerable,您需要首先使用Cast将序列转换为适当类型的序列。您需要知道序列中对象的实际类型,因为这里没有提到它是什么。

然后依次应用每个操作:

(在c#)

var query = table.Cast<YourTypeGoesHere>()
    .Select(item => item.Column)
    .Distinct()
    .Count();

我放弃了PageDataSource,因为我不能以我想要的方式使用LINQ。为了这个目的,我引入了一个数据表,并在数据表上运行了我的查询,它工作得很好。下面是代码

    Dim dv As New System.Data.DataView
    Dim dt As New System.Data.DataTable
    dv = osReviews.Select(DataSourceSelectArguments.Empty)
    dt = dv.ToTable()

    Dim query = (From row In dt
                 Select row("Source") Distinct).Count()

由于我们在Visual Basic中有Distinct关键字,您可以使用以下查询:

Dim query = (From b In Locales
             Select b.Id Distinct).Count()