我无法找到使用lambda表达式的最新答案,并订购一个包含来自实体的表数据的列表,以便按照"喜欢"没有重复"代理"并且只显示前100名。
我有以下内容,但它并不适用于我不同的猜测。每次我运行并检查它时,它仍然会出现重复的代理商名称。我不知道为什么它没有处理重复的代理商名称。
public PartialViewResult Top100()
{
List<New_NYC_Usage_Table> data = db.New_NYC_Usage_Table.ToList();
data = db.New_NYC_Usage_Table.Where(x => x.Platform != "TOTAL").ToList();
data = data.OrderByDescending(x => x.Agency).Distinct().ToList();
data = data.OrderByDescending(x => x.Likes_Follows_Etc).Take(100).ToList();
return PartialView("_Data", data);
}
如果我不清楚或此帖子无关紧要或者是重复主题,请指出正确的方向或MSDN链接或参考资料以及有用的示例,谢谢。
答案 0 :(得分:1)
我认为你正在尝试获得由喜欢订购的前100名代理商的列表,如果等等但是如果代理商在该列表中两次我假设您只想要排名最高的展示,而不是两者。
我认为这个linq查询应该做你想要的(虽然我只能在类似的桌子上测试它,所以一定要仔细检查)
var data = db.New_NYC_Usage_Table.Where(x => x.Platform != "TOTAL")
.GroupBy(x => x.Agency, (key, g) => g.OrderByDescending(x => x.Likes_Follows_Etc).First()).OrderByDescending(x => x.Likes_Follows_Etc).Take(100).ToList();
这是最新发生的事情。我得到平台不是&#34; TOTAL&#34;的所有记录,然后按代理分组。在每个小组中,我获得最高的喜欢,这样我在每个小组中只有一个代理商。然后我按喜欢订购这些记录,最后进入前100名。
我注意到在你的代码中,你总是在每次查询后调用.toList,这通常不是必需的,通常会损害性能。你应该只在最后一刻调用列表。你的linq表达式实际上并不是数据的集合,而是你想要的指令,你可以继续添加到这条指令中(就像你在代码中那样但没有&#34; .toList&#34;)和它实际上并没有获得数据,只有当你真正尝试查看数据时才会最终获得数据并让它变得非常高效。每当你打电话给.toList时,你都要求评估你的数据,但那时你不关心那里有什么,你只关心你的回报结果。