[英]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.