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-很乐意帮忙,谢谢!林克不是我的强项,看着这两个给出的答案,我觉得我应该能够找到答案,但我的思考过程有点不对劲。你很接近。谢谢!林克不是我的强项,看着两个给出的答案,我觉得我本应该能够找到答案,但我的思考过程有点不对劲。你很接近。