如何加入Linq Query Group的组项?

时间:2013-09-16 06:57:31

标签: wpf linq group-by

我有三张相关的表。

    Letter(Id,Name)

    SendLetter(Id,LetterId)

    ReciveLetter(Id,SendLetterId,Type,User)

我想获得ReciveLetter的记录,即SenLetterId& Type

我使用此查询。

    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的组项目。我想为每个分组项选择UserName的连接。

例如:

    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

2 个答案:

答案 0 :(得分:0)

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

var q=(..//
).GroupBy(x=>new {x.SentLetterType, x.Type});

foreach(var group in q)
{
  foreach(var result in group)
  {
   string sUsername+=result.Username+",";
  }
}

答案 1 :(得分:0)

在不知道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