これは私が見つけた一般的なエラーですが、修正方法がわかりません。
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()
か?
さらに情報が必要な場合はお知らせください。ありがとうございました。