У меня есть этот лямбда-запрос.
var d = await dbset
.Select(a => new ItemDto
{
Id = a.Id,
Active = a.isActive()
})
.ToListAsync();
isActive
определяется в объекте dbset как (State
, StartDate
и StopDate
- все свойства объекта):
public bool isActive()
{
return isActive(State, StartDate, StopDate);
}
public static bool isActive(State state, DateTimeOffset? startDate, DateTimeOffset? stopDate)
{
return
state == State.Active
&& stopDate >= DateTimeOffset.UtcNow
&& startDate <= DateTimeOffset.UtcNow;
}
В старой структуре Entity это не удалось бы из-за облака дыма и неприятной ошибки, на отслеживание которой потребовались бы годы .. в новом EF Core 3.1 это работает нормально, и я могу отлаживать isActive
и пошагово через них, когда они вызываются из запроса asyn c.
Это говорит мне, что они выполняются на стороне C # /. Net, а не транслируются в SQL (что старая структура Entity пыталась бы сделать).
Может ли кто-нибудь подтвердить, что это действительно так, или я что-то упустил? Если это действительно делает то, что я думаю, это здорово ... и немного избавит от головной боли при использовании этих запросов там, где раньше вам приходилось беспокоиться о том, где был выполнен код.