2016-03-21 25 views
1

kullanıcı (kullanıcı birçok arabalar bu hat nedeninin StackOverflow seçmek durumunda araçların bir numara seçin ve ayrıntılı bilgileri TheLINQ büyük bir diziye sahip bir Tablo Filtre

sorun görebilirsiniz yüzden cars için bir masa ve bir ağaç var amaçlanan değil).

1300 Araba bulunmaktadır. Bu durumda id[], 720 tamsayı vardır. 163 kimliği ile tamam çalışıyor.

IEnumerable<car> cresult = db.cars.Where(c => id.Any(s => s == c.car_id)).ToList(); 
               ^^^ 
               int [] 

bir büyük dizi masamı filtrelemek için en iyi yolu nedir?

Hata:

enter image description here

+0

Bu ne tür bir LINQ? Örneğin. SQL'e, Varlıklar'a (EF sürümü?) vb. –

+0

@IvanStoev EF 6.0, Npgsql –

+0

ile SqlServer sağlayıcısında gerçekleşmez, Npgsql sağlayıcısına özel bir şey olmalıdır. İyi şanslar. –

cevap

2

Sen Contains yerine Any() kullanmak ve kendi karşılaştırma yapıyor olmalıdır.

IList<car> cresult = db.cars.Where(c => id.Contains(s => c.car_id)).ToList(); 

Ayrıca, açıkça bir liste haline getirmek için çalışmalarını yaptık kez IEnumerable<car> yayın yapmak için muhtemelen iyi bir fikir değil.

Diğer performans kazanımları için, HashSet<int> yerine int[] kullanmayı düşünebilirsiniz - bunun bir SQL sorgusuna dönüştürülmesi halinde, büyük olasılıkla (eğer varsa) kazancı olmayacaktır.

+0

neyi kastediyorsun 'kendi mukayesemizi yap' Bir karşılaştırma işlevi yazmam gerek? ve lütfen iyi bir fikrin ne yaptığını detaylandırabilir misiniz? Ben sadece View'de göstermek için listeyi döndürüyorum. Ben de 'IEnumerable' bir 'List' isnt değil daha basit olduğunu düşünüyorum? –

+0

@JuanCarlosOropeza Özür dileriz, belki 'kendi karşılaştırmanızı yapıyor' gereksizdi .. 's => s == c.car_id'' e atıfta bulunuyordum. IEnumerable 'türüne dökülmesiyle ilgili olarak, dönüş değerlerinde * olabildiğince spesifik olması önerilir. Bu durumda, 'IEnumerable 'seçeneğine döküm yapmak,' Count 'vb. Gibi bilgileri kaybetmeniz anlamına gelir. Bu işlemi bir“ List ”e çevirerek yaptığınız işi tamamlamış olursunuz. Eğer onu bir görüntü kontrolüne aktarıyorsanız, bu bir fark yaratmayabilir, ancak genel olarak iyi bir fikirdir. – Rob

+0

Çalışmak harika, Daha büyük olmamalı, Ama eğer int [] 'daha büyükse endişelenebilir miyim? –

İlgili konular