2017-04-17 43 views
1

我有一个存储过程是这样的:如何将结果集与linq进行分组?

SELECT UrlId, TypeId, DomainId, Url, d.OrgId AS orgId 
FROM SystemUrls 
JOIN Domaindata d ON d.Id = DomainId 

它给了我这样的结果:

enter image description here

enter image description here

在这个貌似代码

我想要什么:

将在domainId 上分组此结果,以便我得到两行。

我有这个类:

public class TestModel 
{ 
    public long DomainId { get; set; } 
    public List<SystemUrl> Urls { get; set; } 
} 

我想获得像resul:

域ID 79 Urls.count()= 2

域ID 81 Urls.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(); 

的问题是,我似乎得到域ID的权利,但没有其他数据似乎遵循:

enter image description here

我该如何解决这个问题?

回答

2
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(); 
+0

linq并不是我的强项,现在我觉得我应该能够弄清楚这一点。谢谢 – ThunD3eR

+0

@ Ra3IDeN - 乐于提供帮助。 – Igor

2

这里是你如何能做到这:

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(); 
+0

谢谢! Linq并不是我的强项,并且看到了两个给出的答案,我觉得我应该能够弄清楚这一点,但是我的思考过程有点偏离。 – ThunD3eR

+0

你非常接近。 –

0

将DataAdapter的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()); 

     } 


    } 

}