2013-07-17 20 views
7

Bir IQueryable nesnesinin, ifade ağacında bir OrderBy uygulanmış olup olmadığını öğrenmenin bir yolu var mı?Linq IQueryable uygulanmış bir siparişin var olup olmadığını kontrol edin

Sahip olduğum senaryo, bir ızgara denetiminin sayfalama etkin ve sütun başına sıralama olmasıdır. Ancak, varsayılan olarak bir sıralama uygulanmadığından, bu durumda, Linq to SQL, satır sayısı için korkunç derecede büyük bir seçim yapar; bu nedenle, tüm senaryolarda bir sipariş vermem gerekir, ancak yalnızca birincil anahtar tarafından varsayılan bir sipariş uygulamam gerekir başka bir sipariş belirtilmemişse.

Bu mümkün mü?

+1

Tek düşünebildiğim tek şey sipariş vermek ve siparişin aynı olup olmadığını görmek veya sipariş verirken bir boole ayarlamaktır, daha kısa bir yol düzenlemek, öğelerin sıralanıp ayarlanmadığını görmek için öğeleri karşılaştırmak olabilir – Sayse

+0

Hangi yolla orderby (id) büyük seçim yardımcı olur mu? – usr

+0

@usr Linq2Sql, alttaki sorguya herhangi bir açık sıralama ölçütü uygulanmamışsa, SELECT ROW_NUMBER() OVER (ORDER BY Grofit

cevap

6

Özel bir ExpressionVisitor veya istediğiniz herhangi bir yinelemeli çapraz geçiş mekanizmasını kullanarak sorgudaki ifade ağacını inceleyerek öğrenebilirsiniz.

Kodunuzun iyi tasarlanmadığını hissediyorum. Muhtemelen siparişin bool gibi bir yerde uygulandığı gerçeğini saklamalısınız. Belki de uygulamanızın bilgi akışının yeniden araştırılması gerekiyor.

Bu denetim yaklaşımı ile bu bilgileri hack bir şekilde kurtarıyorsunuz.

+0

Oh evet aklımda hiç şüphem yok tasarlanan kod, maalesef müşterilerim tarafından kısıtlı olduğum gibi prehistorik zamanlardaki teknoloji tercihleri ​​ile sınırlı olan problemleri çözmek için seçimlerim sınırlıdır ve ızgara kontrolü * varsayılan bir sıralama uygulamasına sahip olabilir, ancak birisi yine de sıralamayı kapatabilir Bu da, altta yatan sorguda (ızgara tarafından kullanılmadan önce işlemek için ortak bir arabirimden geçerken) çalışacak sorunlara neden olur. – Grofit

İlgili konular