c# - 加入时在 linq 中排序

标签 c# asp.net-mvc linq

我必须显示最想看到状态的电影。为此,我加入了两个表 1. MovieInformation 和 2. SeentItWantToSeeIt。我用这个代码片段计算出最想看的电影。

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 是可查询的,我加入了它想看电影。

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 descending,但它不起作用。请帮帮我。

最佳答案

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

在您的情况下,您可以通过添加 ToList() 将其降低到 LINQ to Objects 级别,就像您对第一个查询所做的那样,或者添加一个 AsEnumerable() .在该级别,您无需担心交换排序或不同调用的顺序。但是,您可能需要使用 overloaded Distinct method that accepts an IEqualityComparer并为 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,因为此时它已经在客户端上,在内存中。

关于c# - 加入时在 linq 中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939039/

相关文章:

c# - 决定选择何种 SQL 查询的设计模式

c# - 如何在 C# 中使用样式表为组件设置字体?

c# - 检查 asp.net mvc ValidationMessage

css - 使用 ASP.NET MVC Bootstrap UI。有现成的模板吗?

asp.net - 如何控制重复的 Ajax 'post' 提交?

c# - “类型”的使用类似于变量(C#)

c# - 异步 SQL 查询执行 - Task.WaitAll(tasks) 永远不会完成

基于对象属性的 Linq Distinct

linq - 如何使用 Lambda 表达式加入 LINQ 并在 DTO 中获取结果?

c# - Full outer join,在 2 个数据表上,带有列列表