сгруппировать в запросе LINQ - PullRequest
2 голосов
/ 10 мая 2011

У меня есть 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,
            };

Как выбрать столбцы год и URL?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Когда вы группируете в LINQ, ваша группа (grp) в вашем случае является перечислимой, содержащей все записи в группе (строки данных в вашем случае). Затем вы можете либо просматривать записи, либо использовать агрегатные функции, такие как Max, First и т. Д., Чтобы извлечь одно значение из перечисляемого

0 голосов
/ 10 мая 2011

Вы можете группировать по нескольким значениям.В вашем случае группа по идентификатору, году и 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);
    }
...