.net Linq to SQL vs Access SQL-为什么不';t Take()和TOP相同吗?

.net Linq to SQL vs Access SQL-为什么不';t Take()和TOP相同吗?,.net,linq-to-sql,.net,Linq To Sql,很抱歉,我想不出一个更好的标题,但这是一个复杂的问题开始 我正在将access数据库转换为web,并使用linq转换为sql 在access数据库中,有一个SQL函数返回前3条记录,按收集的个人数降序排列。例如,在一个数据集中,有以下收集为37,10,9,9,5,4,1,1的个体,查询(使用前三名)返回37,10,9,9,9 这是目前所期望的效果,因为对于这个特定的结果不需要明显的效果 但是,在使用Take(3)的linq to sql中,返回的结果是37,10,9---Take 3条记录。没有

很抱歉,我想不出一个更好的标题,但这是一个复杂的问题开始

我正在将access数据库转换为web,并使用linq转换为sql

在access数据库中,有一个SQL函数返回前3条记录,按收集的个人数降序排列。例如,在一个数据集中,有以下收集为37,10,9,9,5,4,1,1的个体,查询(使用前三名)返回37,10,9,9,9

这是目前所期望的效果,因为对于这个特定的结果不需要明显的效果

但是,在使用Take(3)的linq to sql中,返回的结果是37,10,9---Take 3条记录。没有意外

我的问题是-如何让linq返回与原始access SQL相同的结果?我知道我可以通过循环代码和检查每个记录来做到这一点,直到我得到3个不同的记录,但这样做似乎有点愚蠢

var topThree = collection.OrderByDescending(c => c).Distinct().Take(3);
var top = collection.Where(topThree.Contains).OrderByDescending(c => c);
那应该是你想要的。您可以轻松地将其包装到扩展方法中


那应该是你想要的。您可以轻松地将其包装到扩展方法中。

您还需要在
top
查询中包含排序:
var top=collection.Where(toptree.Contains).OrderByDescending(c=>c)正是我需要的,谢谢!旁注,当第二个号码被复制时,这导致我在访问中发现了一个错误,即47,11,11,7。。。Access将只计算前三个,而不是全部4个。不一致,sheesh。您还需要在
top
查询中包含排序:
var-top=collection.Where(topThree.Contains).OrderByDescending(c=>c)正是我需要的,谢谢!旁注,当第二个号码被复制时,这导致我在访问中发现了一个错误,即47,11,11,7。。。Access将只计算前三个,而不是全部4个。矛盾,嘘。