gpt4 book ai didi

c# - LINQ to Entities 等效于 sql "TOP(n) WITH TIES"

转载 作者:太空狗 更新时间:2023-10-29 17:51:57 26 4
gpt4 key购买 nike

我最近一直在 sql server 中寻找与 WITH TIES 等效的 LINQ,我遇到了一些事情,但无法解决证明是有用的。

我知道this question之前被问过并且有一个可接受的答案,但它不适用于 ties does 的方式。考虑到由 {3 2 2 1 1 0} 组成的数据集,使用 GroupBy() 的解决方案不会像 TOP(3) WITH TIES 的预期那样产生结果 结果集将是 {3 2 2 1 1} 而它应该是 {3 2 2}

使用以下示例数据(取自 this question) :

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)

传统的 OrderByDescending(p => p.Score).Take(3) 将产生:MamuziKamala 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();

编辑:

@Zefnus

我不确定您想要它的顺序,但要更改顺序,您可以在 select iToList()< 之间放置一个 OrderBy(s => s.Score)/em>

我无法检查我的 linq 子句会生成什么 sql 语句。但我认为你的回答要好得多。你的问题也很好。我从来没有想过 top with ties in linq。 ;)

基本上它只取第一个列表中的前 3 个分数并将它们与整个列表进行比较,我只取与第一个列表的分数相等的那些分数。

关于c# - LINQ to Entities 等效于 sql "TOP(n) WITH TIES",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22157211/

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