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

时间:2013-06-06 18:22:47

标签: c# vb.net linq dataset linq-query-syntax

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

select count(distinct source) from SourceTable

我尝试了以下内容,它确实提供了计数,但没有明确(或唯一)计数。

Dim query = Aggregate source In pagedDS
            Into Count()

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

3 个答案:

答案 0 :(得分:3)

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

然后一个接一个地应用每个操作:

(在C#中:)

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

答案 1 :(得分:3)

我放弃了PageDataSource,因为我无法以我想要的方式使用LINQ。我为此目的引入了一个DataTable,并在DataTable上运行了我的查询。这是代码

    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()

答案 2 :(得分:1)

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

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