Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq query Take()优先于Distinct()?_C#_Linq - Fatal编程技术网

C# linq query Take()优先于Distinct()?

C# linq query Take()优先于Distinct()?,c#,linq,C#,Linq,我必须使用LINQ选择不同的1000条记录。但当我看到生成的查询时,它需要1000条记录,并对该结果应用distinct IQueryable<TestClass> resultSet = (from w in ......).Distinct().Take(1000); 有没有办法解决这个问题,将distinct应用到结果集,然后从distinct结果集中获取1000条记录?您只获取1000条记录,然后使用代码将distinct应用到这1000条记录上,即使您在获取()之前执行d

我必须使用LINQ选择不同的1000条记录。但当我看到生成的查询时,它需要1000条记录,并对该结果应用distinct

IQueryable<TestClass> resultSet = (from w in ......).Distinct().Take(1000);

有没有办法解决这个问题,将distinct应用到结果集,然后从distinct结果集中获取1000条记录?

您只获取1000条记录,然后使用代码将distinct应用到这1000条记录上,即使您在获取()之前执行distinct()

实现这一点的最佳方法是直接从SQL查询中获取1000条不同的记录,而不是从代码中获取

string queryString = "SELECT top 1000 from (select distinct ... from table)";

可以使用嵌套linq查询

IQueryable<TestClass> resultSet = from x in ((from w in ......).Distinct()).Take(1000);
IQueryable resultSet=从x英寸((从w英寸…).Distinct()).Take(1000);

将在拍摄前处理Distinct。再次检查您的系统是否正常运行。下面是一个工作示例:

var dataset = new int[]
{
    1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10
};

var query = from o in dataset select o;
var result = query.Distinct().Take(6);

// result = `1,2,3,4,5,6`
我怀疑您的问题是在SQL中使用distinct。如果是这种情况,还可以使用分组来获得所需的结果

var distinctById = from o in query
                   group o by o.Id into uniqueIds
                   select uniqueIds.FirstOrDefault();

您是否尝试添加
跳过(0)
?这可能会创建一个“offset fetch next”查询,而不是top n。您是否尝试过使用group运算符而不是distinct来查看这是否会影响操作顺序?请尝试
var subquery=(from w in…).distinct()result=(从子查询中的s开始,其中1==1选择s)。要查看这是否会强制distinct成为子查询的一部分。请查看jon skeet答案,然后执行
resultSet.ToString()
,并将结果粘贴到问题中作为编辑。这将向我们显示它正在生成的查询。这不会以任何方式更改生成的查询。这将在它到达查询提供程序之前编译成一个相同的表达式树。
您仅获取1000条记录,然后对这1000条记录应用distinct
-这是基于什么?我不是这样理解这个问题的。Kirk,我的帖子的重点是使用sql查询来获取数据这是有效的,因为你有一个int的列表。当你有一个T的列表时,它就不起作用了(T是一个类)@Arvind897当
T
是一个类时,它肯定会起作用。@JonHanna没有。它做的是,它需要1000条记录,然后对这些记录进行一次区分。。当您向DB查询时。“当您有一个T列表时,它不会工作(T是一个类)”,当您有一个T列表时,不会查询任何DB。问题可能是使用Distinct with SQL。如果是这种情况,您可以使用“组”。我已经更新了我的示例。
var distinctById = from o in query
                   group o by o.Id into uniqueIds
                   select uniqueIds.FirstOrDefault();