C# 如何使用linq对结果集进行分组?

C# 如何使用linq对结果集进行分组?,c#,linq,tsql,C#,Linq,Tsql,我有一个如下所示的存储过程: SELECT UrlId, TypeId, DomainId, Url, d.OrgId AS orgId FROM SystemUrls JOIN Domaindata d ON d.Id = DomainId 它给了我这个结果: 在代码中,这看起来像: 我想要什么: 将此结果分组到domainId上 这样我就有两排了 我有这门课: public class TestModel { public long DomainId { get; set; }

我有一个如下所示的存储过程:

SELECT UrlId, TypeId, DomainId, Url, d.OrgId AS orgId
FROM SystemUrls
JOIN Domaindata d ON d.Id = DomainId
它给了我这个结果:

在代码中,这看起来像:

我想要什么:

将此结果分组到domainId上 这样我就有两排了

我有这门课:

public class TestModel
{
    public long DomainId { get; set; }
    public List<SystemUrl> Urls { get; set; }
}
公共类测试模型
{
公共长域ID{get;set;}
公共列表URL{get;set;}
}
我试图得到一个结果,比如:

域ID 79 URL.count()=2

DomainId 81 URL.COunt=2

我的尝试:

                var t =
                (from u in urls
                    select
                    new TestModel
                    {
                        DomainId = u.DomainId,
                        Urls = new List<SystemUrl> {new SystemUrl {Url = u.Url}}
                    }).GroupBy(v => v.DomainId).ToList();
var t=
(来自URL中的u)
选择
新测试模型
{
DomainId=u.DomainId,
Url=新列表{新系统Url{Url=u.Url}
}).GroupBy(v=>v.DomainId).ToList();
问题是,我似乎正确地获得了域名,但其他数据似乎都不正确:


我如何解决这个问题?

以下是您的解决方法:

var t = urls.GroupBy(u => u.DomainId)
    .Select(g => new TestModel{
        DomainId = g.Key,
        Urls = g.Select(u => new SystemUrl {Url = u.Url}).ToList()
    })
    .ToList();
var t = urls.GroupBy(v => v.DomainId).Select(g => new TestModel
{
     DomainId = g.Key,
     Urls = g.Select(u => new SystemUrl {Url = u.Url}).ToList()
}).ToList();

以下是您如何做到这一点:

var t = urls.GroupBy(v => v.DomainId).Select(g => new TestModel
{
     DomainId = g.Key,
     Urls = g.Select(u => new SystemUrl {Url = u.Url}).ToList()
}).ToList();

将DataAdapter reults放入datatable。然后使用以下命令:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;




namespace ConsoleApplication49
{
    class Program
    {

        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Urld", typeof(int));
            dt.Columns.Add("Typeid", typeof(int));
            dt.Columns.Add("DomainId", typeof(int));

            dt.Rows.Add(new object[] { 13, 1, 79 });
            dt.Rows.Add(new object[] { 14, 2, 79 });
            dt.Rows.Add(new object[] { 15, 2, 81 });
            dt.Rows.Add(new object[] { 16, 1, 81 });

            var results = dt.AsEnumerable()
                .GroupBy(x => x.Field<int>("DomainID"))
                .ToDictionary(x => x.Key, y => y.Count());

        }


    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
使用系统数据;
命名空间控制台应用程序49
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“Urld”,typeof(int));
添加(“Typeid”,typeof(int));
添加(“域ID”,typeof(int));
Add(新对象[]{13,1,79});
Add(新对象[]{14,2,79});
Add(新对象[]{15,2,81});
Add(新对象[]{16,1,81});
var结果=dt.AsEnumerable()
.GroupBy(x=>x.Field(“域ID”))
.ToDictionary(x=>x.Key,y=>y.Count());
}
}
}

将数据适配器reults放入数据表中。然后使用以下命令:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;




namespace ConsoleApplication49
{
    class Program
    {

        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Urld", typeof(int));
            dt.Columns.Add("Typeid", typeof(int));
            dt.Columns.Add("DomainId", typeof(int));

            dt.Rows.Add(new object[] { 13, 1, 79 });
            dt.Rows.Add(new object[] { 14, 2, 79 });
            dt.Rows.Add(new object[] { 15, 2, 81 });
            dt.Rows.Add(new object[] { 16, 1, 81 });

            var results = dt.AsEnumerable()
                .GroupBy(x => x.Field<int>("DomainID"))
                .ToDictionary(x => x.Key, y => y.Count());

        }


    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
使用系统数据;
命名空间控制台应用程序49
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“Urld”,typeof(int));
添加(“Typeid”,typeof(int));
添加(“域ID”,typeof(int));
Add(新对象[]{13,1,79});
Add(新对象[]{14,2,79});
Add(新对象[]{15,2,81});
Add(新对象[]{16,1,81});
var结果=dt.AsEnumerable()
.GroupBy(x=>x.Field(“域ID”))
.ToDictionary(x=>x.Key,y=>y.Count());
}
}
}

linq不是我的强项,目前我觉得我应该能够解决这个问题。Thanks@Ra3IDeN-很高兴能帮上忙。林克不是我的强项,目前我觉得我应该能够解决这个问题。Thanks@Ra3IDeN-很乐意帮忙,谢谢!林克不是我的强项,看着这两个给出的答案,我觉得我应该能够找到答案,但我的思考过程有点不对劲。你很接近。谢谢!林克不是我的强项,看着两个给出的答案,我觉得我本应该能够找到答案,但我的思考过程有点不对劲。你很接近。