C# MVC 5-使用LINQ的Order by MAX()
我有一个IQueryable LINQ声明,它返回了已查看的前5个最新报告。我目前有LINQ语句返回正确的列表,但如果有人多次查看报告,我不希望看到重复的报告。我相信我需要使用MAX()语法,但我不明白在我的LINQ语句中应该把它放在哪里。我一直在网上搜索,但我觉得我没有找到任何对我有意义的解决方案 数据库中前10条记录如下所示: 报告数量C# MVC 5-使用LINQ的Order by MAX(),c#,asp.net-mvc,linq,max,C#,Asp.net Mvc,Linq,Max,我有一个IQueryable LINQ声明,它返回了已查看的前5个最新报告。我目前有LINQ语句返回正确的列表,但如果有人多次查看报告,我不希望看到重复的报告。我相信我需要使用MAX()语法,但我不明白在我的LINQ语句中应该把它放在哪里。我一直在网上搜索,但我觉得我没有找到任何对我有意义的解决方案 数据库中前10条记录如下所示: 报告数量 20 20 20 12 12 5 5 5 7 四, 当我的LINQ语句运行时,它将返回以下内容: 报告数量 20 20 20 12 十二, 但我想让它把
20
20
20
12
12
5
5
5
7
四, 当我的LINQ语句运行时,它将返回以下内容: 报告数量
20
20
20
12
十二, 但我想让它把这个还给我: 报告数量
20
12
5
7
四,
var QuickLinks=(System.Linq.IQueryable)null;
var sso=b.getSSO(User.Identity.Name);
快速链接=(从db.Report\u Completion\u状态中的r开始)
在db.Report\u Web\u使用中加入ru
关于r.Report_Num等于ru.Report_Num
其中ru.sso==sso
选择新建WebReportingToolDAL.Models.ViewModels.QuickLinksViewModel
{
报告名称=r.报告名称,
报告链接=r.report链接,
report\u num=r.report\u num,
点击日期=ru.hit\u date.Value
}).OrderByDescending(x=>x.hit_date).Take(5);
您需要按r分组,以便找到每个组的最大命中日期。值:
var QuickLinks = (from r in db.Report_Completion_Status
join ru in db.Report_Web_Usage
on r.Report_Num equals ru.report_num
where ru.sso == sso
group ru by new { r.Report_Name, r.Report_Link, r.Report_Num } into rug
select new WebReportingToolDAL.Models.ViewModels.QuickLinksViewModel {
report_name = rug.Key.Report_Name,
report_link = rug.Key.Report_Link,
report_num = rug.Key.Report_Num,
hit_date = rug.Max(ru => ru.hit_date.Value)
}).OrderByDescending(x => x.hit_date).Take(5);
看起来您可能需要使用Distinct?您是否希望获得最近的热门日期?谢谢您的快速回复@NetMage似乎回答了我的问题。非常感谢!网络法师-就是这样!非常感谢。
var QuickLinks = (from r in db.Report_Completion_Status
join ru in db.Report_Web_Usage
on r.Report_Num equals ru.report_num
where ru.sso == sso
group ru by new { r.Report_Name, r.Report_Link, r.Report_Num } into rug
select new WebReportingToolDAL.Models.ViewModels.QuickLinksViewModel {
report_name = rug.Key.Report_Name,
report_link = rug.Key.Report_Link,
report_num = rug.Key.Report_Num,
hit_date = rug.Max(ru => ru.hit_date.Value)
}).OrderByDescending(x => x.hit_date).Take(5);