Sar*_*yan 9 .net c# sql linq entity-framework
我最近一直在sql服务器中搜索LINQ相同的东西,我遇到了一些事情,这些事情无法发挥作用.WITH TIES
我知道这个问题被问过,有一个公认的答案,但联系不上班的路上呢.采用该解决方案GroupBy()如预期不会导致TOP(3) WITH TIES考虑包括数据集{3 2 2 1 1 0}的结果集将是{3 2 2 1 1}它应该是{3 2 2}
使用以下示例数据(取自此问题):
CREATE TABLE Person
(
Id int primary key,
Name nvarchar(50),
Score float
)
INSERT INTO Person VALUES (1, 'Tom',8.9)
INSERT INTO Person VALUES (2, 'Jerry',8.9)
INSERT INTO Person VALUES (3, 'Sharti',7)
INSERT INTO Person VALUES (4, 'Mamuzi',9)
INSERT INTO Person VALUES (5, 'Kamala',9)
Run Code Online (Sandbox Code Playgroud)
传统OrderByDescending(p => p.Score).Take(3)将会导致一个:Mamuzi,Kamala和一个 Tom(或 Jerry)它应该包括BOTH
我知道没有内置的等价物,我找到了实现它的方法.我不知道这是否是最好的方式,并开放替代解决方案.
var query = (from q in list.OrderByDescending(s => s.Score).Take(3).Select(s => s.Score).Distinct()
from i in list
where q == i.Score
select i).ToList();
Run Code Online (Sandbox Code Playgroud)
编辑:
@Zefnus
我不确定您想要的顺序,但要更改顺序,您可以在select i和ToList()之间放置 OrderBy(s => s.Score )
我无法检查我的 linq 子句会产生什么 sql 语句。但我认为你的答案要好得多。你的问题也很好。我从来没有想过在 linq 中打领带。;)
基本上它只从第一个列表中取前 3 个分数并将它们与整个列表进行比较,我只取那些与第一个列表的分数相等的分数。