2013-02-22 45 views
9

LINQ sorgu kullanarak veritabanı tablomdan 2 öğe seçmek istiyorum ve ben bir örnek gördüm UNION Ben çok fazla deneyimim yok ama bence ihtiyacım olan şey bu olabilir ama ben Ben düzeltemediğim bir hata olsun ve yine de düzeltilebilir olup olmadığından emin değilim. o IEnumarebale ile IQueryable üzerinde UNION kullanmaya çalışıyor hakkında değiştirilmiş göründüğü gibiLinq UNION sorgusu iki öğe seçmek için

IList<String> materialTypes = ((from tom in context.MaterialTypes 
            where tom.IsActive == true 
            select tom.Name) 
            .Union(from tom in context.MaterialTypes 
            where tom.IsActive == true 
            select (tom.ID))).ToList(); 

: İşte benim sorgusu olur. Böyle ToString() ekleyerek düzeltmek çalıştı - Visual-Studio-2010 hata altını temizlerken yol açtı (tom.ID).ToString ama çalışma zamanında alıyorum:

{"LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression."} 

Ty Leron.

+4

Neden "Union" kullanmak yerine 'new {tom.Name, tom.ID}' seçeneğini seçmiyorsunuz? –

+0

Verileri kullanmak istiyorsanız, 'DataSource' olarak kullanmak istiyorum, anonim türden string'e dönüştürülemeyen bir hata verir. 'ToString()' i hemen önce ekledikten sonra .ToList() 'Başka bir dönüşüm elde ederim hata - bu kez char’dan 'String'’e ve' Union'tan bu tür durumlar için gördüğüm çözüm. Başka bir yolu var mı? – Leron

cevap

25

DÜZENLEME:

Tamam ben LINQtoEF içinde int.ToString(), bu yazıyı okuyunuz başarısız nedenini buldum: Bu yanımda çalışır Problem with converting int to string in Linq to entities

: seninkinden Açık

 List<string> materialTypes = (from u in result.Users 
             select u.LastName) 
         .Union(from u in result.Users 
           select SqlFunctions.StringConvert((double) u.UserId)).ToList(); 

Bu gibi olmalıdır:

IList<String> materialTypes = ((from tom in context.MaterialTypes 
             where tom.IsActive == true 
             select tom.Name) 
             .Union(from tom in context.MaterialTypes 
             where tom.IsActive == true 
             select SqlFunctions.StringConvert((double)tom.ID))).ToList(); 

Teşekkürler bugün bir şey öğrendim :)

+0

Yine - 'LINQ - Varlıklar, 'System.String ToString()' yöntemini tanımaz ve bu yöntem bir mağaza ifadesine dönüştürülemez. 'Orijinal postamdan gelen hata bir iç istisnadır. Yolunu denediğimde aldığım bu. Ben parantez ile aynı düşünüyorum. – Leron

+0

Lol, Öğle yemeğine gidip sonra test edeceğim. Eğer cevabınızı kabul ederse işe yarayacak – Leron

+0

Gönderiyi değiştirdim, bu yüzden daha net olduğunu düşünüyorum :) – Tom