C# 加入时linq中的Order by

C# 加入时linq中的Order by,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我必须放映那些最想看的电影。为此,我加入了两个表1。电影资讯及2。看不见。我用这些代码片段计算出最想看的电影 public class RangkedMovieList { public int MovieID { get; set; } public int count { get; set; } } rankedList = db.SeenItWantToSeeIt.Where(m => m.Status == 1 && m.MovieID != nu

我必须放映那些最想看的电影。为此,我加入了两个表1。电影资讯及2。看不见。我用这些代码片段计算出最想看的电影

public class RangkedMovieList
{
    public int MovieID { get; set; }
    public int count { get; set; }
}

rankedList = db.SeenItWantToSeeIt.Where(m => m.Status == 1 && m.MovieID != null)
                                 .GroupBy(m => m.MovieID)
                                 .Select(g => new RangkedMovieList 
                                              {  MovieID = g.Key.Value,
                                                 count = g.Count() 
                                              })
                                 .ToList();
AllMovieInfo是我加入时想要看电影的Iqueryable

AllMovieInfo = (from r in rankedList
                join a in AllMovieInfo on r.MovieID equals a.MovieID
                orderby r.count descending
                select a).Distinct().AsQueryable();

此查询工作正常,并按MovieID排序结果,但我想按想要看的电影计数排序所有电影。虽然我已经为orderby r.count编写了代码,但它不起作用。请帮帮我。

我猜您的第二个LINQ查询正在数据库级别运行。如果是这样的话,
Distinct
调用很可能不会遵循之前指定的排序顺序(事实上,如果您放弃
Distinct
调用并调试输出,它应该正确排序)。通常,对于简单查询,您可以通过交换排序顺序(即,
orderby
)和
Distinct
调用来解决此问题,同时将查询保持在数据库级别,但您的情况稍微复杂一些,因为您需要使用
rankingList

在您的例子中,您可以通过添加一个
ToList()
(与第一个查询相同)或一个
AsEnumerable()
,将其降低到LINQ to Objects级别。在这个级别上,您不需要担心交换排序或不同调用的顺序。但是,您可能需要使用并为
AllMovieInfo
提供一个比较器。查看链接以获取如何实现该功能的示例

var query = (from r in rankedList
            join a in AllMovieInfo on r.MovieID equals a.MovieID
            select new { Info = a, Rank = r.count })
            .AsEnumerable()
            .OrderByDescending(o => o.Rank);
            .Select(o => o.Info)
            .Distinct(); // will likely need an IEqualityComparer here

// this could be combined with the above query, but I split it for clarity
AllMovieInfo = query.AsQueryable();
此时您可能不需要
AsQueryable
,因为它已经在客户端的内存中了。

许多来自我的祖国尼泊尔的“Namaskar”。这个代码片段完全按照我的预期工作!