Сводный отчетливый счет в LINQ - VB.NET

У меня есть данные, которые поступают из базы данных и идут в PagedDataSource. Данные взяты из запроса, который извлекает около 10 записей с примерно 20 столбцами. Основываясь на одном имени столбца varchar `source', я хочу найти уникальные экземпляры источника. Это очень простой запрос. В SQL я бы сделал это:

select count(distinct source) from SourceTable

Я пробовал следующее, которое дает счет, но не различный (или уникальный) счет.

Dim query = Aggregate source In pagedDS
            Into Count()

Я не знаю, как выбрать столбец в запросах LINQ и как применять агрегат только по одному столбцу. Мне нужно это в VB.NET, но решение C# должно быть достаточно близко.

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

Поскольку PagedDataSource не реализует IEnumerable<T>, просто IEnumerableнужно сначала использовать Cast привести последовательность к последовательности правильного типа. Вы должны будете знать, каков реальный тип объектов в последовательности, поскольку вы не упомянули, что это здесь.

Затем просто примените каждую операцию одну за другой:

(В C#:)

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

Так как у нас есть Distinct ключевое слово в Visual Basic, вы можете использовать этот запрос:

Dim query = (From b In Locales
             Select b.Id Distinct).Count()
Другие вопросы по тегам