LINQ

2016-03-31 5 views
2

でテーブルフィールドを使用して条件を使用する新しいDateTimeの作成方法c#でwinアプリケーションを使用して、whereフィールドにconcatened by tableフィールドを含むlinqクエリを取得します。 私のクエリは次のとおりです。LINQ

t016.COD_MESEが文字列rapresenting月の値である
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は、関数に渡された小数点パラメータであり、aiDataは、DateTimeのパラメータです。

が、このLINQクエリは私に、このエラーを与える:私はので、私はインターネットでEntityFramework(バージョン6)に存在するDBFunctionsを使用するように示唆解決策を発見した

LINQ to Entities does not recognize the method Convert.ToDateTime

が、私はEntityFrameworkのマイナーバージョンを持っていますこの機能は使用できません。

もう一つの発見された解決策は、linqクエリの前に日付をフォーマットすることでしたが、T016_FATTに依存するため私のケースではできません。

私の提案はありますか?

おかげでたくさん

+0

...月と日の間にセパレータがないようです。私はそれがメソッドの期待された入力であれば気になります。また、このようにすべての行を変換すると、インデックスやテーブルスキャン(インデックスの種類、最初の条件に一致する行の割合に依存します)を実行するコストがかかります。あなたは実際に日付自体を気にしないので、なぜaiDataから年/月を抽出しないのですか? (または潜在的に完全な日付を保存するか、またはカレンダーテーブルをping) –

+0

私のコードで申し訳ありません "01 /" + t016.COD_MESE + "/" + t016.ANNO、私は間違って答えた –

答えて

1

は、クエリがSQLに変換されようとしているが、この場合には、あなたのLINQプロバイダは、SQL文にそのメソッド呼び出しを変換する方法を知りません覚えておいてください。この問題を回避するには、AsEnumerable拡張メソッドを使用して、LinqからLinqへのLinqからObjectsへの切り替えを行うことができます。あなたがそのメソッドを呼び出した後、あなたの日付変換を適用することができます。

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

あなたはエンティティへのLINQでサポートされている方法を確認したい場合は、このlinkを確認することができます。

+0

このソリューションは、たくさん –

+0

あなたは大歓迎です。あなたを助けてくれてうれしい;) – octavioccl