如何解决LINQ to等同于sql``带有领带的OPn''的实体
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();
编辑:
我不确定您想要的顺序,但是要更改顺序,可以在 select i 和 ToList() 之间放置一个OrderBy(s => s.Score)。 __
我无法检查我的linq子句将生成什么sql语句。但是我认为您的答案要好得多。您的问题也很好。我从来没有想过在linq中保持联系。;)
基本上,它仅从第一个列表中获得前3个得分,并将它们与整个列表进行比较,而我仅获得与第一个列表中的得分相等的那些得分。
解决方法
我最近一直在 sql server中 搜索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)
传统OrderByDescending(p => p.Score).Take(3)
将会导致一个:Mamuzi
,Kamala
和 一个
Tom
( 或 Jerry
)它应该包括 BOTH
我知道没有内置的等效项,我已经找到了实现它的方法。我不知道这是否是最好的方法并为其他解决方案打开大门。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。