【问题标题】:How to join group item of Linq Query Group By?如何加入 Linq Query Group By 的组项?
【发布时间】:2013-09-16 19:21:41
【问题描述】:

我有三个相关的表。

    Letter(Id,Name)

    SendLetter(Id,LetterId)

    ReciveLetter(Id,SendLetterId,Type,User)

我想获取 Group By SenLetterId & Type 的 ReciveLetter 记录。

我使用这个查询。

    var dashbord = from d in db.ReceiveLetter
                            where (d.SendLetter.LetterId == LetterId)
                            group d by new { d.SendLetter, d.SendType } into g
                            select new Items{ ...... };

它是按 SendLetterId 和 Type 分组的项目。我想为每个分组项目选择用户名的加入。

例如:

    SendLetter:
    1   1   
    2   1      

    ReciveLetter:
    1   1    Type1   A
    1   1    Type1   B
    1   1    Type2   C
    1   2    Type1   D
    1   2    Type1   E

    Result:
    1    1   Type1  A,B
    1    1   Type2  C
    2    1   Type1  D,E

【问题讨论】:

  • 选择加入用户名?你的意思是你想从每个组中获取用户名?
  • 我想加入每个组的所有用户名

标签: wpf linq group-by


【解决方案1】:

在不知道 Item 长什么样以及不知道您使用哪种类型的 LINQ 的情况下,我可以为您提供一种适用于 linq-to-sql 和实体框架的通用方法。

var query = from d in db.ReceiveLetter
                where (d.SendLetter.LetterId == LetterId)
                group d by new { d.SendLetter, d.SendType } into g
                select new { g.Key.Sendletter,
                             g.Key.SendType, 
                             Users = g.Select(x => x.Name)
                           };

var dashboard = query.AsEnumerable()
                .Select(x => new Item { x.SendLetter.Id,
                                        x.SendLetter.LetterId,
                                        x.SendType,
                                        Names = string.Join(", ", x.Users)
                                      });

AsEnumerable() 将执行切换到 linq-to-objects 以执行 string.Join

【讨论】:

    【解决方案2】:

    我尝试这样的事情(这可能不是那么优化):

    var q=(..//
    ).GroupBy(x=>new {x.SentLetterType, x.Type});
    
    foreach(var group in q)
    {
      foreach(var result in group)
      {
       string sUsername+=result.Username+",";
      }
    }
    

    【讨论】:

    • 谢谢,可以,但我想不循环。可以查询吗?
    • 是的,您在查询中执行此操作,尽管从技术上讲它仍然是一个循环。 .ToEnumerable().ForEach(x => x.DoSomething())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多