0
這是我發現的一個常見錯誤,但我不知道如何解決它。爲什麼Linq-to-Entities在查詢中識別查詢,但在查詢從方法返回時不能識別?
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
})
};
}
在你想看到它時,這裏是我所示例的ExampleUDCs聲明類:
public IEnumerable<ExampleUDCDTO> ExampleUDCs { get; set; }
有誰知道辦法爲我解決這個問題,從我的ExampleUDCDTO().Select(int id)
方法重用代碼,而不是把所有的查詢到第一Select()
方法?
如果您需要更多信息,請讓我知道。謝謝。