Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制LINQ实体识别我的方法_C#_.net_Entity Framework_Linq To Entities_Iqueryable - Fatal编程技术网

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; }
    }
}