2013-07-04 47 views
1
AllMovieInfo = from movieInfo in AllMovieInfo 
          from countryMovie in movieInfo.SeenItWantToSeenIt 
          where countryMovie.Status==1 
          select movieInfo; 

      var seenitorderby = db.SeenItWantToSeeIt.Where(m => m.Status == 1).GroupBy(m => m.MovieID).Select(g => new {MovieID =g.Key,count=g.Count()}).OrderBy(o=>o.count); 
      List<int> seenItList=seenitorderby.Select(s=>s.MovieID).ToList(); 
      AllMovieInfo = (from a in AllMovieInfo 
         from s in seenItList 
         where seenItList.Contains(a.MovieID) 
         select a).Distinct(); 

该查询是根据“AllMovieInfo.MovieID”,这是显而易见的排序结果,但我必须为了根据随附的ID的“结果”是“seenitorderby”,例如:看到它orderby可能需要movieID 2,25,7,14,25,那么我需要按照与参观者相同的顺序使用AllMovieInfo。如何根据“seesitorderby”命令“结果”?排序依据的LINQ到实体

+0

根据你的连接是不是'AllInfo.ID'和'SeenInfo.ID'一样? – NinjaNye

+0

那么您希望订购的“SeenInfo”主键是什么? – NinjaNye

+0

请注意,它们现在被'Id'命令返回的事实是纯粹的机会(最可能是数据库实现的方式)。除非您明确提供了订单,否则假定结果将是随机的,即使它们似乎不在您的开发系统中 – Basic

回答

0

根据你的连接是不是AllInfo.ID和SeenInfo.ID一样?

如果我错了以下应该这样做

var result= (from a in AllInfo 
      from s in SeenInfo 
      where s.ID==a.ID 
      orderby s.ID // <-- this should be the SeenInfo primary key 
      select a).Distinct(); 

更新:根据问题的更新

感谢您的更新。我想我现在明白你的问题。你希望通过计数特定电影订购...

AllMovieInfo = from movieInfo in AllMovieInfo 
       from countryMovie in movieInfo.SeenItWantToSeenIt 
       where countryMovie.Status==1 
       select movieInfo; 

var seenItOrderBy = db.SeenItWantToSeeIt 
         .Where(m => m.Status == 1) 
         .GroupBy(m => m.MovieID) 
         .Select(g => new { MovieID = g.Key, Count=g.Count()}); 

var result = (from a in AllMovieInfo 
       from s in seenItOrderBy 
       where s.MovieID = a.ID 
       orderby s.Count 
       select a).Distinct(); 

您可以简化这个如下...

请注意:这是从我的头顶并基于你相信你正试图在你的代码中实现,所以请采取这样做。

var result = db.AllMovieInfo 
       // Where someone wants to see it wants to see it 
       .Where(mi => mi.SeenItWantToSeeIt.Any(m => m.Status == 1)) 
       // Order by number of people that have seen or want to see it 
       .OrderBy(mi => mi.SeenItWantToSeeIt.Count(m => m.Status == 1)); 
+0

仍然不能正常工作.....我的完整代码是 –

+0

这会给出与您现有代码相同的结果,直到您将'orderby'行更改为'SeenInfo'主键。由于'SeenInfo.ID'是'AllInfo'的外键,所以它们与我编辑过的问题一样 – NinjaNye

+0

。请看看它。 –