/ / Wymuś LINQ, aby jednostki rozpoznały moją metodę - c #, .net, encja-framework, linq-to-encje, iqueryable

Wymuś LINQ na Entities rozpoznaj moją metodę - c #, .net, entity-framework, linq-to-entity, iqueryable

Mam ten kod (to tylko przykładowy kod)

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

}

Ten wyjątek rzucania kodu (LINQ do Entities nie rozpoznaje metody GetCarStatus).

Wiem:

  • dlaczego to rzuca
  • Mogę wykonać ToList (), ale potrzebuję Iqueryble
  • Potrafię pisać kod metody bezpośrednio bez użycia metody

Ale chcę wiedzieć, jak to zrobić, aby LINQ to Entities mógł rozpoznać moją metodę?

Odpowiedzi:

0 dla odpowiedzi № 1

Nie jestem pewien, czy LINQ to Entities jest w stanie przekonwertować taką funkcję na zapytanie SQL. Może być konieczne użycie Wyrażenie w takich przypadkach.


0 dla odpowiedzi nr 2

Pozwól DTO dokonać konwersji:

class CarDto
{
...

public int StatusId { get; set; }

public CarStatusEnum CarStatus
{
get { return StatusId == 2 || StatusId == 3
? CarStatusEnum.Four
: CarStatusEnum.Five; }
}
}

Więc w zapytaniu wystarczy skopiować TypeId wartość z Car. I w aplikacji, do której masz dostęp CarStatus.

Pamiętaj, że powinieneś wrócić CarStatusEnum członkowie, a nie zwykłe liczby całkowite (nawet jeśli pasują do siebie CarStatusEnum wartości. Te może zmiana w przyszłości, która nie złamie twojego kodu, ale na pewno spowoduje ciekawe błędy).