2009-06-18 14 views
2
私はこのようなcertaionクエリ式をサポートしていないエンティティへのLINQについての例外を得続ける

LINQのエンティティへのクエリ風変わり

MyDataContext db = new MyDataContext() 
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString)) 

私は、文字列は、エンティティストアにパースに沿って通過しようとしていないよ、I比較のためにその文字列を整数に解析したいだけです。手前でこれを行うことは唯一の回避策ですか、私は完全にここから離れていますか?

+0

Btw、これはまた、EFで投影を行うのが本当に難しくなります –

+0

そして、あなたはどちらか一方ではできません。Where(expression).Select(item => item.ToString())クエリでToStringを表現する方法はありません。 –

答えて

6

最良の選択肢は、 LINQステートメント:

Int32 brandId = Int32.Parse(brandIdString) 
MyDataContext db = new MyDataContext() 
Brand = db.Brands.First(b => b.BrandId == brandId) 

説明:

あなたはLINQを使用している場合は、それはそれはあなたのデータベースクエリをためにできることとして、作業の多くをオフロードする方法を把握したいと考えています。これを行うために、実際には、さまざまなラムダ式で行うことを指示するすべてのものの式ツリーを作成します。次に、クエリを実行するときに、実行するように依頼したことを実行するために、どのSQL文が最適になるかを決定します。これにより、非常にファンシーな最適化を行うことができます。しかし、何かをSQL文に変換する方法がわからないと、クエリを実行しようとすると気になることがあります。

-2

はい。これは吸う。私はあなたがクエリの外でデータの解析や正規化をしなければならないことが分かりました。そして結果を渡してください。クエリの境界で日付の書式を設定しようとすると、この問題に遭遇しました。私はそれをクエリから文字列変数に移動し、適切な書式設定が既に適用されている変数に渡してしまいました。

LAME - Entity Frameworkには長い道のりがあります!

+0

私は受け入れられた答えと同じことを言いましたが、それに投票して降りてしまいました! (:P) –

+0

なぜ、人があなたに理由を教えずにダウンボトムすると、迷惑です。 – StriplingWarrior

0

これは使用できますか?

MyDataContext db = new MyDataContext(); 
Brand b = db.Brands.Where(b => b.BrandId == Int32.Parse(brandIdString)).First(); 

(...ラムダを使用していない)別の解決策はこれです:

MyDataContext db = new MyDataContext(); 

Brand b = (from Brand b in db.Brands 
      where b.BrandId == Int32.Parse(brandIdString) 
      select b).First(); 

(また、あなたは各コード行の末尾に;を逃している、とあなたがいませんあなたがクエリから出て行っているものの変数名を指定しましたが、ここではそれらはtyposです)...

+0

おそらくまだ動作しません。私はフレームワークがそれをどこかに壊そうとするときにクエリで表現する方法がないと推測しています。それは連鎖した式の束なので、全体としてそれを評価しなければなりません。コレクションにこのlinqがあったなら、あなたは大丈夫でしょう。それはラムダのためのものです。 –

+0

どちらも動作しませんでした。 –

0

文字列の解析に必要なデータベースが存在しません。それに関係する前に、必要な解析を実行します。