2014-04-22 22 views
9

Entity Framework kullanıyorum ve var olan bir kod satırı var. ve veritabanı için bir iint'e geri çevirmek.Varlıklar LINQ, "Int32 Ayrıştırma (System.String)" yöntemini tanımıyor ve bu yöntem bir mağaza ifadesine dönüştürülemiyor

var record = context.enrollments.SingleOrDefault 
    (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID)); 

Çalıştırmaya çalıştığımda, rhis hatası alırım. "LINQ to Entities," Int32 Parse (System.String) "yöntemini tanımıyor ve bu yöntem bir mağaza ifadesine dönüştürülemiyor."

Bunu denedim yanı

var record = context.enrollments.FirstOrDefault 
    (row => row.userId == Convert.ToInt32(UserID) 
    && row.classId == Convert.ToInt32(ClassID)); 

ve ben aldığımız bütün bu hata mesajı, "varlıkları için LINQ yöntemi 'Int32 ToInt32 (System.String)' yöntemini tanımıyor ve bu yöntem sevemeyeceğimizdir Ben sıradışı olduğunu bildiğiniz bir mağaza ifadesi

ve nihayet ben de denedim, tercüme edilebilir, ancak benzer durumlar için geçmişte çalışmıştır.

var record = context.enrollments.SingleOrDefault 
    (row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID) 
    && row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID)); 

Bu hatayı alıyorum. Gördüğünüz gibi farklı şeyleri sevdirmeyi denedim ve hiçbir şey işe yaramıyor, bu yüzden herhangi bir yardım harika olurdu.

+0

Doğru hatırlıyorsam, çalışmasını sağlamak için 'int.Parse' ile' Convert.ToInt32' değiştirebilirsin. –

+0

Bunu yorumlarda belirtmeliydim, ancak bunu denedim ve bu hata iletisini aldım, "{" LINQ to Entities "," Int32 ToInt32 (System.String) "yöntemini tanımıyor ve bu yöntem çevrilemiyor Bir mağaza ifadesine. "}" – SinceForever

+0

"System.Convert.ToInt32" gibi tam ad alanını kullanmayı denediniz mi? Bu özellikle linq'in desteklemediği bir şey değilse yapmam. Sadece burada tahmin ediyorum. – Bensonius

cevap

17

Linq to Entity yılında, kendi Data Base tarafında çalıştırmak için expression tree bunları dönüştürmek için provider tarafından desteklenen sizin query yöntemleri kullanmalıdır. varsayılan olarak bazı yöntemler desteklemelidir

tüm sağlayıcılar Canonical Functions (Read More Here) olarak adlandırılan ve ayrıca linq query (Read More Here) ve (Here) kullanmak edm functions olarak user defined function ve stored procedure tanımlayabilirsiniz.

ayrıca, sağlayıcılar tarafından desteklenen ve EntityFunctions ve SqlFunctions adresindeki expression tree'a dönüştürülebilen yöntemleri kullanabilirsiniz.

ve nihayet soru hakkında, bu gibi, sorgudan önce UserID ve ClassID dönüştürebilirsiniz:

var UID = int.Parse(UserID); 
var CID = int.Parse(ClassID); 
var record = context.enrollments.SingleOrDefault 
    (row => row.userId == UID && row.classId == CID); 
+0

Teşekkür ederim Amir. Bu konuda bir süre sıkışmıştım ve başka bir yerde bir cevap alamadı. – SinceForever

+0

size bekliyoruz –

0

Bu benim için çalışıyor:

var iId = int.Parse(TextBox1.Text); 
var item = db.Items.Where(p => p.ItemID == iId).FirstOrDefault(); 

dönüştürmek gerektiğini çalışmasını sağlamak için sizin lambda ifadesinin dışındaki metin kutusu değeri.

İlgili konular