我有这些代码(这只是示例代码)
public SomeService ()
{
public Queryable<CarDto> GetDtos()
{
context.Cars.Select(c => new CarDto
{
CarDtoId = c.Id,
Name = c.Name,
Status = GetCarStatus(c)
})
}
private CarStatusEnum GetCarStatus(Car car)
{
if(car.statusId == 2 || car.statusId == 3)
{
return 4;
}
return 5;
}
}
此代码抛出异常(LINQ to Entities无法识别方法GetCarStatus)。
我知道:
但是我想知道如何做到这一点,LINQ to Entities可以识别我的方法?
答案 0 :(得分:0)
不确定LINQ to Entities是否能够将此类函数转换为SQL查询。对于此类情况,您可能需要使用Expression。
答案 1 :(得分:0)
让DTO进行转换:
class CarDto
{
...
public int StatusId { get; set; }
public CarStatusEnum CarStatus
{
get { return StatusId == 2 || StatusId == 3
? CarStatusEnum.Four
: CarStatusEnum.Five; }
}
}
因此,在查询中,您只需复制TypeId
中的Car
值即可。在应用程序中,您可以访问CarStatus
。
请注意,您应该返回CarStatusEnum
个成员,而不是普通整数(即使它们与CarStatusEnum
值匹配。这些可能将来会发生变化,这不会破坏您的代码,但肯定会引起有趣的错误。)