#c# #.net #linq #group-by
#c# #.net #linq #группировать по
Вопрос:
У меня есть DataTable, к которому я хочу выполнить запрос GroupBy.
year url type id
=============================
someurl image 0
2003 date 0
someurl image 1
2009 date 1
Мне удалось сгруппировать по моему идентификатору, но я не могу выбрать столбцы «год» и «URL».
Это мой запрос:
var query = from row in table.AsEnumerable()
let uri = row["uri"]
group row by row.Field<int>("id") into grp
orderby grp.Key
select new
{
ID = grp.Key,
};
Как я могу выбрать столбцы year и URL?
Заранее спасибо.
Ответ №1:
Когда вы группируете по в LINQ, ваша группа (grp) в вашем случае является перечислимой, содержащей все записи в группе (строки данных в вашем случае). Затем вы можете либо предварительно просмотреть записи, либо использовать агрегированные функции, такие как Max, First и т.д. чтобы извлечь единственное значение из перечисляемого
Ответ №2:
Вы можете группировать по нескольким значениям. В вашем случае группировать по идентификатору, году и URL-адресу Проверьте здесь
List<WebResource> webResources = new List<WebResource>();
webResources.Add(new WebResource() { Id = 1, Type = "Image", Url = "url1", Year = 2001 });
webResources.Add(new WebResource() { Id = 1, Type = "Text", Url = "url1", Year = 2001 });
webResources.Add(new WebResource() { Id = 3, Type = "Image", Url = "url1", Year = 2001 });
webResources.Add(new WebResource() { Id = 1, Type = "Text", Url = "url1", Year = 2002 });
webResources.Add(new WebResource() { Id = 2, Type = "Image", Url = "url1", Year = 2002 });
webResources.Add(new WebResource() { Id = 3, Type = "Text", Url = "url2", Year = 2002 });
webResources.Add(new WebResource() { Id = 1, Type = "Image", Url = "url1", Year = 2002 });
webResources.Add(new WebResource() { Id = 2, Type = "Text", Url = "url2", Year = 2002 });
var output = webResources.GroupBy(webResource => new {webResource.Id, webResource.Year, webResource.Url })
.Select(group => new {Key = group.Key, Count = group.Count()});
foreach (var webResource in output)
{
Console.WriteLine("Id: " webResource.Key.Id " Url:" webResource.Key.Url " Year:" webResource.Key.Year " Count:" webResource.Count);
}