这是我发现的一个常见错误,但我不确定如何修复它。
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()
方法中?
如果您需要更多信息,请告诉我。谢谢你。