1

テーブルを文字列の外部キー列と結合するLinqtoEntitiesクエリを作成しようとしていますが、関連するテーブルIDには整数IDがあります。データベーススキーマを設計した人はだれでも失敗したことは知っていますが、残念ながら、何らかの理由で、この場合はデータベーススキーマを変更できません。

これが私が得るエラーです:

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

これを引き起こすlinq(エンティティへの)ステートメントは次のとおりです。

var query = from p in db.QBPOes
            join j in db.tblJobManagements on p.CustJob equals j.JobID
            join s in db.tblSuppliers on p.VendorID equals s.SupplierID.ToString()
            where p.ID == poID
            select new 
            {
                p.ID,
                p.Date,
                p.VendorID,
                p.FirstName,
                p.LastName,
                s.SupplierWorkPhone,
                s.SupplierFaxNumber,
                p.CompanyName,
            };

サプライヤーの電話番号とFAX番号を取得したいので、これらのテーブルに参加しています。どんな助けでも大歓迎です。

4

1 に答える 1

2

p.VendorID を にキャストするにintegerは、この回避策を使用できます。生成された SQL はきれいではないかもしれませんが、p.VendorID を整数にキャストできない場合を除き、機能するはずです。

var query = from p in db.QBPOes
            let vendorId = db.QBPOes.Select(x => p.VendorID).Cast<int>().FirstOrDefault()
            join j in db.tblJobManagements on p.CustJob equals j.JobID
            join s in db.tblSuppliers on vendorId equals s.SupplierID
            where p.ID == poID
            select new 
            {
                p.ID,
                p.Date,
                p.VendorID,
                p.FirstName,
                p.LastName,
                s.SupplierWorkPhone,
                s.SupplierFaxNumber,
                p.CompanyName,
            };

s.SupplierID を文字列にキャストしたほうがよい場合があるため、クエリを次のように再配置します。

var query = from s in db.tblSuppliers
            let supplierID = db.tblSuppliers.Select(x => s.SupplierID).Cast<string>().FirstOrDefault()
            join p in db.QBPOes on supplierID equals p.VendorID
            join j in db.tblJobManagements on p.CustJob equals j.JobID
            where p.ID == poID
            select new 
            {
              p.ID,
              p.Date,
              p.VendorID,
              p.FirstName,
              p.LastName,
              s.SupplierWorkPhone,
              s.SupplierFaxNumber,
              p.CompanyName,
            };
于 2012-05-17T18:31:56.343 に答える