Сводный отчетливый счет в 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()