2010-03-12 31 views

cevap

10

SenDistinct sonra sıralanması gerekir veritabanı, daha az işlem bile siparişi korur. Distinct'ing (genellikle bir Hash algoritması kullanıldığı zaman) hiçbir zaman düzeni koruyamaz.

+0

Bu kod derlenmiyor. OrderBy, şu hatayı verir: 'Tür argümanları kullanımdan çıkarılamaz. Tip argümanlarını açık bir şekilde belirtmeyi deneyin. ' –

+0

Oh Gördüğüm,' OrderBy (o => o) 'olması gerekiyordu, çünkü bu noktaya göre öğeler zaten seçilmişti (ve biz bir 'IQueryable ' ile çalışıyoruz). Kodunuzu düzelttim ve onay işaretini verdim - Teşekkürler! –

+0

@BlueRaja: Evet, bunu kaçırdı. Düzeltme için teşekkürler! –

1

Bu soru Nesneler Linq kuralları anlatılır: In Preserving order with LINQ

o düzeni koruyarak hakkında herhangi garantisi ile gelmiyor olarak

+0

Yine de, "SELECT DISTINCT ... ORDER BY ..." sorgusu, SQL Server'da ve büyük olasılıkla diğer DBMS'lerde beklediğiniz gibi çalışır - "orderby" LINQ yan tümcesi, bu durumda üretilirken yalnızca yok sayılır. SQL (en azından bir hata verebilir)? Hala bir hata olduğunu düşünüyorum - LINQ sorgusu bir 'String []' üzerinde kullanıldığında doğru çalışıyor. –

+0

Sorgu planını kontrol ederseniz, ORDER BY DISTINCT'tan sonra meydana geldiğini ortaya çıkarır. Bu nedenle, ORDER BY'de nelerin görünebileceğine dair katı sınırlamalar vardır. Bu, SQL'in sözdiziminin karışıklığa neden olduğu başka bir durumdur. –

+0

"Sorgu planı" nedir ve nasıl görüntüleyebilirim? Yukarıdaki sorguyu SQL Server 2008 Profiler kullanarak elde ettim, ancak açıkçası sadece son sorguyu veriyor. –