2011-07-13 16 views
4

LINQコードでこのエラーが発生する理由を誰かに説明してください。Linq To Entities例外はメソッドを認識せず、ストア式に変換できません

エンティティにLINQは、方法と、この方法 「 GenerateHashWithSalt(可能System.String、可能System.String)を可能System.String」メソッドは、ストア式に変換することができない認識していません。

var query = (from u in context.Users 
         where 
         u.Password == 
          GenerateHashWithSalt(password, GetUserID(username)) 
         select u).Count(); 

答えて

12

あなたは、既知のSQLコマンドにその方法を変換しようとEFの方法を渡そうとしています。 SQLは知らないGenerateHashWithSalt(System.String, System.String)
結果を変数に代入してから、Linq to Entity Queryを生成する必要があります。


var hashedPassword = GenerateHashWithSalt(password, GetUserID(username)); 
var user = (from p in Users 
     where p.Password == hashedPassword 
     select p).FirstOrDefault(); 
+0

お返事ありがとうございます、私はあなたが提案したものを正確に行いました。とても素敵で清潔な説明。 – Nivash

+0

クエリ時間まで値を取得できない場合はどうなりますか?私は同じエラーがありますが、これは私のクエリです: '(User.InfoからUser.logIn) – adripanico

0

LINQプロバイダは、あなたの式ツリーを見て、それから、同等のTSQL(など)を生成してみてください。これは、の方法で認識されるか、が認識されるの表現シナリオでのみ機能します。

C#コード内の任意のメソッドを調べてデータベースで実行することはできません。

ただし、あなたはそれのために、クエリを簡素化できます。

var hash = GenerateHashWithSalt(password, GetUserID(username); 
var count =context.Users.Count(u => u.Password == hash); 
0

ジェスロが言うと、上記のリンクは、一例を示している、あなたはSQLが知っている何かに変換する必要があるので、それはshortcoming of LINQ to Entities

だように見えます。

関連する問題