C# 强制LINQ实体识别我的方法
我有这些代码(这只是示例代码)C# 强制LINQ实体识别我的方法,c#,.net,entity-framework,linq-to-entities,iqueryable,C#,.net,Entity Framework,Linq To Entities,Iqueryable,我有这些代码(这只是示例代码) 公共服务() { 公共可查询GetDtos() { context.Cars.Select(c=>newcardto { CarDtoId=c.Id, Name=c.Name, 状态=GetCarStatus(c) }) } 私家车状态枚举GetCarStatus(私家车) { 如果(car.statusId==2 | | car.statusId==3) { 返回4; } 返回5; } } 此代码引发异常(LINQ to Entities无法识别方法GetCa
公共服务()
{
公共可查询GetDtos()
{
context.Cars.Select(c=>newcardto
{
CarDtoId=c.Id,
Name=c.Name,
状态=GetCarStatus(c)
})
}
私家车状态枚举GetCarStatus(私家车)
{
如果(car.statusId==2 | | car.statusId==3)
{
返回4;
}
返回5;
}
}
此代码引发异常(LINQ to Entities无法识别方法GetCarStatus)
我知道:
- 为什么它会抛出
- 我可以做托利斯特,但我需要
- 我可以在不使用方法的情况下内联编写方法代码
但我想知道如何做到这一点,使LINQ to Entities能够识别我的方法?不确定LINQ to Entities是否能够将此类函数转换为SQL查询。您可能需要在这种情况下使用。让DTO进行转换:
class CarDto
{
...
public int StatusId { get; set; }
public CarStatusEnum CarStatus
{
get { return StatusId == 2 || StatusId == 3
? CarStatusEnum.Four
: CarStatusEnum.Five; }
}
}
因此,在查询中,您只需从Car
复制TypeId
值。在应用程序中,您可以访问CarStatus
请注意,您应该返回
CarStatusEnum
成员,而不是纯整数(即使它们匹配CarStatusEnum
值。这些值将来可能会更改,这不会破坏您的代码,但肯定会导致有趣的错误)。通过实现您自己的查询提供程序,您尝试过简单的三元运算符吗?像这样:Status=(car.statusId==2 | | car.statusId==3)?4:5
@IVAAAN123,我指出我可以内联编写方法代码而不使用方法“我怎么能这样做,LINQ to实体可以识别我的方法?”:你不能。。。这是纯C代码,无法自动转换为SQL。你能提供一些例子或教程吗,因为我能找到它
class CarDto
{
...
public int StatusId { get; set; }
public CarStatusEnum CarStatus
{
get { return StatusId == 2 || StatusId == 3
? CarStatusEnum.Four
: CarStatusEnum.Five; }
}
}