gpt4 book ai didi

c# - 加入时在 linq 中排序

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:13 24 4
gpt4 key购买 nike

我必须显示最想看到状态的电影。为此,我加入了两个表 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com