2016-06-29 2 views
2

を照会:クラスは、エンティティへのLINQで構築することができない私のコードは、サーバー側で以下のようなものです

エンティティ:私は次のエラーが表示されたプロジェクトを実行するとき

public CUSTOMER GetCustomerByNumber(string customerNumber){ 
      var customerInfo = (from c in db.CUSTOMER 
           where c.CUSTOMERNUMBER == customerNumber 
           select new CUSTOMER() 
           { 
            Id = c.Id, 
            FirstName = c.FirstName, 
            LastName = c.LastName 
           }).SingleOrDefault(); 

      return customerInfo; 
} 

が、または複雑な種類の 'CUSTOMER'はLINQ エンティティクエリに構成できません。

答えて

0

はないCUSTOMER()あなたがCustomer

public CUSTOMER GetCustomerByNumber(string customerNumber){ 
     var customerInfo = (from c in db.CUSTOMER 
          where c.CUSTOMERNUMBER == customerNumber 
          select new CUSTOMER // HERE 
          { 
           Id = c.Id, 
           FirstName = c.FirstName, 
           LastName = c.LastName 
          }).SingleOrDefault(); 

     return customerInfo; 

を記述する必要があります。しかし、すでに結果が想定して、あなたがCustomerクラスでこの

var customerInfo = db.CUSTOMER.Where(c => c.CUSTOMERNUMBER == customerNumber).SingleOrDefault(); 
2

状突出書くことができカスタマーであるEntity Frameworkのは不可能です顧客はマッピングされたエンティティです。代わりに、あなたはこれを試すことができます。

public CUSTOMER GetCustomerByNumber(string customerNumber){ 
     var customerInfo = (from c in db.T_CLUB_CUSTOMER 
          where c.C_CUSTOMER_NUMBER == customerNumber 
          select new 
          { 
           Id = c.Id, 
           D_DEFINE = c.D_DEFINE, 
           B_IS_REAL = c.B_IS_REAL, 
           C_NATIONAL_CODE = c.C_NATIONAL_CODE 
          }).SingleOrDefault(); 

     return new Customer() { Id = customerInfo.Id }; 
} 

このクエリは、投影を行うために匿名型を使用しています。その後、匿名型をCustomerタイプのインスタンスにマップできます。 (CUSTOMERDTOがで宣言されていないと仮定したクラスが、ここでは異なる方法を

public CUSTOMERDTO GetCustomerByNumber(string customerNumber){ 
     var customerInfo = (from c in db.T_CLUB_CUSTOMER 
          where c.C_CUSTOMER_NUMBER == customerNumber 
          select new CUSTOMERDTO 
          { 
           Id = c.Id, 
           D_DEFINE = c.D_DEFINE, 
           B_IS_REAL = c.B_IS_REAL, 
           C_NATIONAL_CODE = c.C_NATIONAL_CODE 
          }).SingleOrDefault(); 

     return customerInfo; 
} 

お知らせ:

代わりに、(いわゆるのDTOを使用して)投影を行うには、あなたのDbContextの一部ではないクラスを使用することができます

+0

最初の解決策を試すと、次のエラーが表示されます: 'CUSTOMER'型の定数を作成できません。このコンテンツではプリミティブ型または列挙型のみがサポートされています。 – Armita

+0

それは奇妙です。投影せずにクエリを実行できますか?元の値を試してみてくださいLINQクエリのselect文を実行します。その後何が起こるのですか? – hbulens

関連する問題