0

次の例外があります。デザイナーとクラスを確認しました。機会コードは int です。

LINQ to Entities はメソッド 'Int32 ToInt32(System.Object)' メソッドを認識せず、このメソッドはストア式に変換できません

public tblOpportunity GetOpportunityByCode(string clientCode, string opportunityCode)
        {
            tblOpportunity opportunity = null;

            ConnectionHandler.Invoke<EntityConnection>((connection) =>
            {
                var context = new xxEntities();
                opportunity = context.tblOpportunities.FirstOrDefault<tblOpportunity>(o => o.ClientCode == clientCode && o.OpportunityCode == Convert.ToInt32(opportunityCode));
            });

            return opportunity;
        }
    }

public partial class tblOpportunity
    {

        public int OpportunityCode { get; set; }
4

4 に答える 4

4
 public tblOpportunity GetOpportunityByCode(string clientCode, string opportunityCode)
    {
        tblOpportunity opportunity = null;
        var convertedOpportunityCode = Convert.ToInt32(opportunityCode);
        ConnectionHandler.Invoke<EntityConnection>((connection) =>
        {
            var context = new DMSEntities();
            opportunity = context.tblOpportunities.FirstOrDefault<tblOpportunity>(o => o.ClientCode == clientCode && o.OpportunityCode == convertedOpportunityCode);
        });

        return opportunity;
    }

これでうまくいくはずです。問題は、SQL に Convert.ToInt32 のようなものが存在しないため、エンティティ フレームワークが式を有効な SQL に変換できないことです。

于 2013-06-05T10:15:21.127 に答える
1

ToInt32LINQ が伝えていることは、機能をバックエンドにプッシュする機能を実装していないということです。ただし、問題なく独自のコードで実行できます。

public tblOpportunity GetOpportunityByCode(string clientCode, string opportunityCode) {
    tblOpportunity opportunity = null;
    // Do the conversion outside LINQ
    var opCodeInt = Convert.ToInt32(opportunityCode);
    ConnectionHandler.Invoke<EntityConnection>((connection) => {
        var context = new xxEntities();
        opportunity = context.tblOpportunities.FirstOrDefault<tblOpportunity>(
            o => o.ClientCode == clientCode && o.OpportunityCode == opCodeInt
        ); //                                                       ^^^^^^^^^
    });
    return opportunity;
}
于 2013-06-05T10:16:43.333 に答える
0

バッキング ストア クエリ言語に直接変換できないため、このメソッドは式内では機能しませんが、その前に十分な変換を行うことができます。文字列から整数への解析を先験的に行いint、クエリでローカルに定義された適切なものを使用します。

そうすることで、個人的には、単に結果を式にスローするのではなく、無効な入力をより適切に処理できるようにするために、int.TryParseむしろ使用することができます。Convert.ToInt32

于 2013-06-05T10:15:11.963 に答える