LINQ: порядок по количеству уникальных элементов в списке <строкa>
У меня есть список идентификаторов, правильно сохраненных в List < > . Теперь мне нужно сгруппировать этот список и подсчитать количество сортировок, отсортированных по убыванию.
Пример:
List<string> aryIDs = new List<string>;
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("3214");
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("1234");
Создать:
"1234", 3
"4321", 2
"3214", 1
Это было бы легко в TSQL, но я бы хотел, если это возможно, избегать серверного перехода, ненужных таблиц и т.д.
Спасибо заранее.
Обновление. Преобразование VB.NET для Ralph Shillington ответит ниже:
Dim result = From id In aryIDs _
Group id By id Into Group _
Order By Group.Count() Descending _
Select id, Count = Group.Count()
result.Dump()
Ответы
Ответ 1
List<string> aryIDs = new List<string>();
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("3214");
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("1234");
var result = from id in aryIDs
group id by id into g
orderby g.Count() descending
select new { Id=g.Key, Count=g.Count() };
result.Dump();
Вырезать и вставить это в LinqPad, и вам должно быть хорошо идти.
Он также может быть записан с использованием лямбда-выражений как:
aryIDs.GroupBy (id => id).OrderByDescending (id => id.Count()).Select(g => new { Id=g.Key, Count=g.Count()}).Dump();
Ответ 2
Как насчет http://msdn.microsoft.com/en-us/vcsharp/aa336747#countGrouped:
List<Customer> customers = GetCustomerList();
var orderCounts =
from c in customers
select new { c.CustomerID, OrderCount = c.Orders.Count() };