0

我有三个相关的表。

    Letter(Id,Name)

    SendLetter(Id,LetterId)

    ReciveLetter(Id,SendLetterId,Type,User)

我想获取 Group By SenLetterId&的 ReciveLetter 记录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 和类型分组的项目。我想为每个分组项目选择用户名的加入。

例如:

    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
4

2 回答 2

0

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

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

foreach(var group in q)
{
  foreach(var result in group)
  {
   string sUsername+=result.Username+",";
  }
}
于 2013-09-16T07:59:36.080 回答
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.

于 2013-09-16T11:21:41.373 回答