使用linq asp.net获取特定会议标题的决策列表

时间:2014-09-30 08:10:13

标签: sql asp.net linq

我有一个数据库表。我想要的是使用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;
       }

有人可以告诉我如何将决定清单返回特定的会议标题吗?

1 个答案:

答案 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
              });