group by in LINQ query

我的梦境 提交于 2020-01-23 15:21:05

问题


I've got a DataTable where i want to perform a GroupBy query on.

year    url      type     id
=============================
        someurl  image    0
2003             date     0
        someurl  image    1
2009             date     1

I've managed to group on my id, but I am not able to select the columns "year" and "Url".

This is my query:

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,
            };

How can i select the columns year and url?

Thanks in advance.


回答1:


When you group by in LINQ your group (grp) in your case is an enumerable containing all the entries in a group (data rows in your case). You can then either foreach the entries or use aggregate functions like Max, First, etc. to extract a single value from the enumerable




回答2:


You can group by multiple values. In your case group by id, year and url Check here

    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);
    }


来源:https://stackoverflow.com/questions/5947665/group-by-in-linq-query

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!