2011-08-08 21 views
14

ile Concat() ile çalışmaz VB.net ve aşağıdaki LINQ deyimini kullanarak. "Sipariş tarafından", Concat() ile çalışmadığından şüpheleniyorum. Kullanıcının sahip olduğu mevcut öğeyi listelemek ve daha sonra mevcut öğeleri daha hızlı listelemek istiyorum. Bu yüzden önce mevcut öğeyi db'den seçiyorum ve sıradaki mevcut öğeleri sırayla seçiyorum. LINQ, ifadeyi ve PK tarafından sıralama (sıralaması) ile sıralamayı görmezden geliyor. İfadeyi yürüttükten hemen sonra listeyi inceledim. İfadeyi kırıp ayrı ayrı yaptıkları zaman, tahmin edildiği gibi çalışırlar. Herhangi bir fikir, öneri veya yorum. sayesinde PMOrder by, LINQ

(From items In myDatabase.ItemAssignments _ 
Where items.BuildingID = buildingID _ 
And items.ResidentID = ResidentID _ 
Select items).Concat(From moreitems In myDatabase.ItemAssignments _ 
         Where moreitems.occupied = 0 _ 
         And moreitems.BuildingID = buildingID _ 
         Order by moreitems.Floor, moreitems.ItemNumber _ 
         Select moreitems) 

cevap

14

o LINQ to SQL geldiğinde Concat gerçekten maddesi ile sipariş görmezden gelmez . Bu, LINQPad kullanıyorsanız veya DataContext.Log property'u kurduysanız oluşturulan SQL'den doğrulanabilir.

Bunu ele almanın bir yolu, siparişe yardımcı olmak için anonim bir türden bir kukla değer sunmaktır. Siparişi belirtmeniz gerekene kadar başlattığınız sorgu sözdizimini kullanarak aynı yaklaşım mümkün olsa da, açıklık sağlamak için aşağıdaki sorguları ayırdım.

Dim firstQuery = From items In myDatabase.ItemAssignments _ 
       Where items.BuildingID = buildingID _ 
       And items.ResidentID = ResidentID _ 
       Select New With { .Row = items, .Order = 1 } 
Dim secondQuery = From moreitems In myDatabase.ItemAssignments _ 
        Where moreitems.occupied = 0 _ 
        And moreitems.BuildingID = buildingID _ 
        Select New With { .Row = moreitems, .Order = 2 } 

Dim query = firstQuery.Concat(secondQuery) _ 
         .OrderBy(Function(o) o.Order) _ 
         .ThenBy(Function(o) o.Row.Floor) _ 
         .ThenBy(Function(o) o.Row.ItemNumber) _ 
         .Select(Function(o) o.Row) 

Başka az tercih seçenek veritabanından sonuçları çeker sorgularınızın biri, üzerinde AsEnumerable method aramak. İlgili ürün sayısına bağlı olarak ve daha fazla filtrelemeye ihtiyaç varsa, bu performans üzerinde olumsuz bir etkiye sahip olabilir.

From items In myDatabase.ItemAssignments.AsEnumerable() ... 

sipariş ikinci bölümünde amaçlanan ve oluşturulan SQL kadar yansıtacaktır olarak daha sonra çalışacaktır:

kullanmak için orijinal sorgunun ilk bölümünü değiştirmek, bu yaklaşım kullanın.

İlgili konular