C# 将LINQ to实体序列化为JSON

C# 将LINQ to实体序列化为JSON,c#,json,linq,entity-framework,serialization,C#,Json,Linq,Entity Framework,Serialization,我正在尝试将linq中的场地/演出时间关系序列化为Javascript,并且很难将它们分组,基本上我有以下linq的输出 Venue ID | Venue Name | Party Name | Party ID 74 CityStars Cinema Late Night (3am) 2 74 CityStars Cinema Sunrise (6am) 3

我正在尝试将linq中的场地/演出时间关系序列化为Javascript,并且很难将它们分组,基本上我有以下linq的输出

Venue ID |  Venue Name        |   Party Name             | Party ID
74          CityStars Cinema      Late Night (3am)         2
74          CityStars Cinema      Sunrise (6am)            3
74          CityStars Cinema      Morning (9am)            4
74          CityStars Cinema      Noon (12pm)              5
74          CityStars Cinema      After Noon (3pm)         6
我现在的问题是:

JavaScriptSerializer rSerialize = new JavaScriptSerializer();               
var enVenues = from v in db.Venues
               join t in db.VenueTimes on v.ID equals t.VenueID
               join p in db.VenueParty on t.PartyID equals p.ID
               select new
               {
                   VenueID = v.ID,
                   VenueName =  v.TitleEn,
                   PartyName = p.NameEn,
                   PartyID = p.ID
               };

rMovie.VenuesArray = rSerialize.Serialize(enVenues);
但我想做的是将linq按场馆名称分组如下:

{[
"VenueID" : 74, 
"VenueName" : "CitySars Cinema", 
"VenueShowtimes" : [ {"Late Night", 2}, {"Sunrise" , 3}, etc... ]
]}
我该怎么做呢?

在这里(这是一个很好的练习):

公共课堂场地
{
public int VenueId{get;set;}
公共字符串VenuName{get;set;}
公共字符串PartyName{get;set;}
公共int PartyId{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
列表场馆=新列表()
{
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“深夜(凌晨3点)”,
PartyId=2},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“日出(早上6点)”,
PartyId=3},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“早上(9点)”,
PartyId=4},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午(中午12点)”,
PartyId=5},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午后(下午3点)”,
PartyId=6},
};
var venuesGrouped=场馆.GroupBy(v=>v.VenueName)。
选择(组=>
新的
{
VenueId=group.First().VenueId,
VenuName=group.Key,
VenueShowTimes=“[”+组。
选择(v=>string.Format(@“{{{0},{1}}}”,v.PartyName,v.PartyId))。
聚合((party1,party2)=>party1+“,“+party2)+”]
});
foreach(VenuesGroup中的var地点)
{
控制台写入线(
string.Format(“{{[\'VenueID\':{0},\n\'VenueName\':{1}\n,\'VenueShowTimes\':{2}]}”,
viouse.VenueId、viouse.VenueName、viouse.VenueShowTimes);
}
}
}
在这里(这是一个很好的练习):

公共课堂场地
{
public int VenueId{get;set;}
公共字符串VenuName{get;set;}
公共字符串PartyName{get;set;}
公共int PartyId{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
列表场馆=新列表()
{
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“深夜(凌晨3点)”,
PartyId=2},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“日出(早上6点)”,
PartyId=3},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“早上(9点)”,
PartyId=4},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午(中午12点)”,
PartyId=5},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午后(下午3点)”,
PartyId=6},
};
var venuesGrouped=场馆.GroupBy(v=>v.VenueName)。
选择(组=>
新的
{
VenueId=group.First().VenueId,
VenuName=group.Key,
VenueShowTimes=“[”+组。
选择(v=>string.Format(@“{{{0},{1}}}”,v.PartyName,v.PartyId))。
聚合((party1,party2)=>party1+“,“+party2)+”]
});
foreach(VenuesGroup中的var地点)
{
控制台写入线(
string.Format(“{{[\'VenueID\':{0},\n\'VenueName\':{1}\n,\'VenueShowTimes\':{2}]}”,
viouse.VenueId、viouse.VenueName、viouse.VenueShowTimes);
}
}
}

以Leniel的代码为基础,下面是一个使用您的
JavaScriptSerializer
的版本,应该与您的select语句一起使用:

var venuesGrouped = enVenues.GroupBy(v => v.VenueName)
         .Select(group =>
             new
             {
                 VenueId = group.First().VenueId,
                 VenueName = group.Key,
                 VenueShowTimes = group.Select(v => new { PartyName = v.PartyName, PartyId = v.PartyId })
             });

string jsonresult = rSerialize.Serialize(venuesGrouped);

以Leniel的代码为基础,下面是一个使用
JavaScriptSerializer
的版本,应该与select语句一起使用:

var venuesGrouped = enVenues.GroupBy(v => v.VenueName)
         .Select(group =>
             new
             {
                 VenueId = group.First().VenueId,
                 VenueName = group.Key,
                 VenueShowTimes = group.Select(v => new { PartyName = v.PartyName, PartyId = v.PartyId })
             });

string jsonresult = rSerialize.Serialize(venuesGrouped);