簡體   English   中英

linq查詢Take()優先於Distinct()?

[英]linq query Take() takes precedence over Distinct()?

我必須使用LINQ選擇不同的1000條記錄。 但是當我看到生成的查詢時,它需要1000條記錄並對該結果應用不同的記錄。

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

我的TestClass會是什么樣的,

public TestClass
{
public string TestPRop { get; set; }
 //..has some 20 properties
}

有什么方法可以解決這個問題,以便將distinct應用於結果集,然后從不同的結果集中獲取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();

即使您在Take()之前執行distinct(),您只需要記錄1000條記錄,然后使用代碼對這1000條記錄應用distinct。

實現此目的的最佳方法是直接從SQL查詢中獲取1000個不同的記錄,而不是從代碼IE中獲取

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

您可以使用嵌套的linq查詢

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM