LINQ

2016-03-31 21 views
2

ile tablo alanını kullanarak durumun C# içinde bir win uygulaması var nasıl bir Tablo alanı ile birleştirilmiş bir veri içeren bir linq sorgusu elde etmek için yeni bir DateTime oluşturmak için. benim sorgu: LINQ

t016.COD_MESE bir dize rapresenting ay değerdir
var fatture = (from t016 in cont.T016_FATT 
       where t016.ID_FATTURA = aiIdFattura 
       && Convert.toDateTime("01" + t016.COD_MESE+"/"+t016.ANNO) > aiData 
       select t016).ToList(); 

, aiIdFattura işleve geçirilen bir ondalık parametredir ve Aidata bir DateTime parametredir.

ama bu linq sorgusu bana bu hata veriyor:

LINQ to Entities does not recognize the method Convert.ToDateTime

i internet EntityFramework (sürüm 6) mevcuttur DBFunctions kullanmayı öneren bir çözüm bulduk ama ben EntityFramework küçük bir versiyonu var bu işlevi kullanamaz.

başka bir çözüm linq sorgusundan önce biçimlendirmek için biçimlendirilmişti ama benim durumumda T016_FATT'a bağlı olarak mümkün değil, bu yüzden ilk önce tarihimi biçimlendiremiyorum.

Bu yüzden beni önerecek bir fikrin var mı?

sayesinde

+0

... Ay ile ay arasındaki ayları ayırdığınız anlaşılıyor. Metodun beklenen girişi olsaydı endişeliyim. Ayrıca, bu gibi her satırı dönüştürmek size bir performans gösterecek, bir indeks ya da muhtemelen bir tablo taraması yapacaktır (hangi endekslere sahip olduğunuza ve ilk koşulla eşleşen satırların yüzdesine bağlı olacaktır). Aslında kendi başına tarih zamanını umursamıyorsunuz, o zaman neden aiData'dan yıl/ay ayıklamıyorsunuz? (ya da potansiyel olarak tam tarih saklamak, ya da bir takvim tablosu ping) –

+0

kodumda üzgünüm "01 /" + t016.COD_MESE + "/" + t016.ANNO, ben yanlış –

cevap

1

sorgu SQL çevrilmiş olacak ve bu durumda da Linq sağlayıcı bir sql deyimi bu yöntem çağrısı çevirmek bilmiyor hatırla çok. Bu sorunu önlemek için, AsEnumerable uzantı yöntemini kullanarak Linq'in Varlıklar'a Linq'den Objectq'e geçmesini sağlayabilirsiniz. O yöntemini çağırdıktan sonra size tarih dönüştürme uygulayabilirsiniz: Eğer varlıkları Linq tarafından desteklenen yöntemlerini görmek istiyorsanız

var fatture = cont.T016_FATT.Where(e=>e.ID_FATTURA == aiIdFattura) 
          .AsEnumerable() 
          .Where(e=>Convert.toDateTime("01" +"/"+ e.COD_MESE+"/"+e.ANNO) > aiData) 
          .ToList(); 

, bu link kontrol edebilirsiniz.

+0

bu çözüm iyi çalışıyor, teşekkürler Bir çok –

+0

rica ederim. yardım ettiğim için sevindim;) – octavioccl