我有一个数据库表。我想要的是使用group by
子句获取数据,就像我在下面的代码中使用的那样。
请注意,Decision是另一个表。现在我希望所有与特定会议标题相关的决定都应该在list.like中显示
meetingtitle1 = decision1,decison2,decison3
meetingtitle2 = decision1,decison2
但是下面的代码只返回一个决策标题。
public List<NewMeetings> GetAllMeetings()
{
var xyz = (from m in DB.MeetingAgenda
//join mp in Meeting on m.MeetingId equals mp.MeetingId
//where m.MeetingId == 2
group m by new { m.Meeting.MeetingTitle } into grp
select new NewMeetings
{
// meetingid = grp.Key.MeetingId,
meetingtitle = grp.Key.MeetingTitle,
decision = grp.Select(x => x.Decision.DecisionTitle).FirstOrDefault(),
total = grp.Count()
}).ToList();
List<NewMeetings> list = xyz.ToList();
return list;
}
public class NewMeetings
{
public int meetingid;
public string meetingtitle;
public string decision;
public int total;
}
有人可以告诉我如何将决定清单返回特定的会议标题吗?
答案 0 :(得分:0)
您在决策列表中执行FirstOrDefault
,这显然意味着您只获得单个值。相反,您可以通过更改此行将它们全部连接成一个更长的字符串(由问题中指示的逗号分隔):
decision = grp.Select(x => x.Decision.DecisionTitle).FirstOrDefault(),
对此:
decision = string.Join(",", grp.Select(x => x.Decision.DecisionTitle)),
但是,由于Linq to Entities无法识别string.Join
,因此您需要在检索数据后(即string.Join
之后)执行ToList
:
var xyz = (from m in DB.MeetingAgenda
group m by new { m.Meeting.MeetingTitle } into grp
select new
{
meetingtitle = grp.Key.MeetingTitle,
decisions = grp.Select(x => x.Decision.DecisionTitle),
total = grp.Count()
})
.ToList()
.Select(m => new NewMeetings
{
meetingtitle = m.meetingtitle,
decision = string.Join(",", m.decisions),
total = m.total
});