0

これは私が見つけた一般的なエラーですが、修正方法がわかりません。

LINQ to Entities does not recognize the method
'System.Linq.IQueryable`1[ProjectX.Models.DTOs.ExampleDTOUDC] Select(Int32)'
 method, and this method cannot be translated into a store expression.

これが問題のコードです。

    public IQueryable<ExampleDTO> Select()
    {
        return from e in db.vw_Example
                   select new ExampleDTO()
                   {

                       exampleUDCs =  new ExampleUDCRepository().Select(v.VehicleID).AsEnumerable()
                       //etc


                   };
    }

ExampleUDCRepository.Select() メソッドは次のとおりです。

  public IQueryable<ExampleUDCDTO> Select(int id)
  {
        return from eudc in db.ExampleUDCs
               where eudc.ExampleID == id
               select new ExampleUDCDTO()
               {
                   ExampleID = eudc.ExampleID,
                   //etc
               };
   }

Linq がすべてを SQL クエリに変換できる形式にする必要がある理由は理解していますが、理解できないのは、最初のSelect()メソッドから同じクエリを取得して次のようなことを行う理由です。

        public IQueryable<ExampleDTO> Select()
    {
        return from e in db.vw_Example
                   select new ExampleDTO()
                   {    
                       ExampleID = e.ExampleID,
                       ExampleUDCs =  (from eudc in db.ExampleUDCs
                                      where eudc.ExampleID == id
                                      select new ExampleUDCDTO()
                                      {
                                           ExampleID = eudc.ExampleID
                                           //etc
                                      })


                   };
    }

ご覧になりたい方のために、私の ExampleDTO クラスの ExampleUDCs 宣言を次に示します。

public IEnumerable<ExampleUDCDTO> ExampleUDCs { get; set; }

ExampleUDCDTO().Select(int id)すべてのクエリを最初のメソッドに入れる代わりに、これを修正してメソッドからコードを再利用する方法を知っている人はいますSelect()か?

さらに情報が必要な場合はお知らせください。ありがとうございました。

4

1 に答える 1

1

Entity Framework は式を処理し、完全な式を SQL の一部にコンパイルしようとします。メソッド呼び出しを含む式を作成しているため、EF はそのメソッド呼び出しを SQL にコンパイルしようとします。そして、それは不可能です。

于 2013-10-31T14:58:55.760 に答える