我有三张相关的表。
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
答案 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
。