2015-05-14 19 views
5

Merhaba, LINQ hanesine atanan bir linq sorgusu kullanıyorum 'System.String ToString (Int32)' yöntemini tanıyan varlıklar ve bu yöntem bir mağaza ifadesine çevrilemez.LINQ to Varlıklar, 'System.String ToString (Int32)' yöntemini tanımıyor

 List<string> resultMap = (from item in mapResult 
            select Convert.ToString(item.ResultDE)).ToList(); 

Hata

 List<Result_DE> resultList = (from result in db.Result_DE 
             where result.IsActive == "1" 
             && resultMap.Contains(Convert.ToString(Convert.ToInt32(result.ID))) 
             select result).ToList(); 

bana bu sorgu yazma doğru şekilde anlatmak Lütfen aşağıda açıklamada atıyor.

+0

aşağıda deyimi ile çalıştık cevap verilmiştir. Bu çalıştırır ancak çıkış 'List resultList verir = (sonucundan db.Result_DE nerede result.IsActive == "1" && resultMap.Contains (SqlFunctions.StringConvert (result.ID)) seçme sonucu). ToList(); ' – user1590948

+0

Dizeyi bir int'ye ve tekrar bir dizeye yeniden mi dönüştürüyorsunuz? –

+0

sonuç nedir? –

cevap

2

Sen Varlıkları açıklamaya bir LINQ bu dönüşüm işlevleri kullanamazsınız, onlar SQL'e tercüme edilemez, hafızada dönüşümleri yapmak gerekir. Ama bunu yapman gerektiğini hiç sanmıyorum.

sadece IdmapResult mevcut olduğu Results göre filtrelenmiş resultList almak için resultMap kullanıyorsanız, aşağıdakileri yapın: yerine, bellek içi koleksiyon

var resultList = db.Result_DE 
    .Where(r => r.IsActive == "1" && mapResult.Any(mr => mr.ResultDE == r.ID)); 
    .ToList(); 

mapResult ise gi önce

var resultIds = mapResult.Select(mr => mr.ResultDE).ToList(); 
var resultList = db.Result_DE 
    .Where(r => r.IsActive == "1" && resultIds.Contains(r.ID)); 
    .ToList(); 
+0

çeşitli kombinasyonunu denedim. Cevabınızı düzenledim, böylece şimdi Linq to Entities yazıyor. Eğer karışıma Linq To Sql eklemeyi düşünüyorsanız, yorumunuzu güncelleyebilirsiniz. IMHO kafa karıştırıcı oldu ve kimse "Linq to DB" – Pawel

+0

@Pawel Kabul ediyorum, olduğu gibi bırakacaktır. – Alex

+0

Teşekkürler :) .. mapResult.Any (mr => mr.ResultDE == r.ID) 'çalıştı – user1590948

0

senin item.ResultDE ve result.ID eğer Int32, değişken tipi neden don doğrudan List<Int32> oluşturmak mı?

List<Int32> resultMap = (from item in mapResult 
           select item.ResultDE).ToList<Int32>(); 

List<Result_DE> resultList = (from result in db.Result_DE 
            where result.IsActive == "1" 
            && resultMap.Contains(result.ID) 
            select result).ToList<Result_DE>(); 
2

: db bağlamda bağlı bir IQueryable aşağıdakileri yapmanız gerekir tüm herhangi bir yöntem (ör. ToString()), AsEnumerable() kullanarak LINQ nesnesini Object'e dönüştürmeniz gerekir.

0

Convert.ToString yerine SqlFunctions.StringConvert kullanın.

Benzer bir soru sordu ve here

İlgili konular