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」に従って結果を並べ替えていますが、「seenitorderby」という ID に従って「結果」を並べ替える必要があります。 ,25 次に、seenitorderby と同じ順序に従って AllMovieInfo が必要です。「seenitorderby」に従って「結果」を順序付けるにはどうすればよいですか?

4

1 に答える 1

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));
于 2013-07-04T12:00:07.530 に答える