0

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

select count(distinct source) from SourceTable

我尝试了以下方法,它确实给出了计数但不是不同的(或唯一的)计数。

Dim query = Aggregate source In pagedDS
            Into Count()

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

4

3 回答 3

3

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

然后只需依次应用每个操作:

(在 C# 中:)

var query = table.Cast<YourTypeGoesHere>()
    .Select(item => item.Column)
    .Distinct()
    .Count();
于 2013-06-06T18:25:11.197 回答
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()
于 2013-06-06T19:08:53.557 回答
1

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

Dim query = (From b In Locales
             Select b.Id Distinct).Count()
于 2013-06-06T18:32:04.783 回答