Как выполнить суммирование с использованием LINQ с IQueryable в Entity Framework Core?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как выполнить суммирование с использованием LINQ с IQueryable в Entity Framework Core?

Сообщение Anonymous »

Я работаю над проектом с использованием Entity Framework Core 3.1, и мне нужно просуммировать общий опыт кандидата в годах. В моем коде есть таблица CvExperiences с полями StartDate и EndDate, и я хочу посчитать общий опыт для каждого кандидата в годах.
Вот часть код, в котором я пытаюсь вычислить Опыт:

Код: Выделить всё

public class GetCandidateCVBankListQuery : DataFetchModel, IRequest
{
public class Handler : IRequestHandler
{
private readonly IHrmService hrmService;
public Handler(IHrmService hrmService) => this.hrmService = hrmService;

public async Task Handle(GetCandidateCVBankListQuery request, CancellationToken cancellationToken)
{
var query = hrmService.Context.CvPersonalInformations
.Include(x => x.CvCertifications)
.Include(x => x.CvEducations)
.Include(x => x.CvEmergencyContacts)
.Include(x => x.CvExperiences)
.Include(x => x.CvSkills)
.Include(x => x.CvReferenceDetails)
.Include(x => x.CvProfessionalQualifications)
.OrderByDescending(x => x.CvEducations.Any(e => e.IsHighestEducation.HasValue))
.Select(x => new
{
CandidateName = x.FullName,
HigherstEducation = x.CvEducations.Select(e => e.EducationLevel).FirstOrDefault(),
CGPA = x.CvEducations.Select(e => e.Result).FirstOrDefault(),
Institute = x.CvEducations.Select(e => e.InstitutionName).FirstOrDefault(),
Age = x.DateOfBirth.HasValue ? (DateTime.Now.Year - x.DateOfBirth.Value.Year -
(DateTime.Now.DayOfYear < x.DateOfBirth.Value.DayOfYear ? 1 : 0)) : (int?)null,
Experience = x.CvExperiences
.Where(e => e.StartDate.HasValue && e.EndDate.HasValue)
.Sum(e => (e.EndDate.Value - e.StartDate.Value).TotalDays / 365.25),
HomeDistrict = x.HomeDistrict
})
.AsQueryable();

return await this.hrmService.GetListViewDataAsync(query, request, cancellationToken);
}
}
}
Этот подход не работает, когда мне нужны результаты Experience, но без Experience он работал нормально. Ошибка показывает:

Код: Выделить всё

The LINQ expression '(EntityShaperExpression:
EntityType: CvExperience
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.EndDate.Value - EntityShaperExpression:
EntityType: CvExperience
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.StartDate.Value).TotalDays / 365.25' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.The LINQ expression '(EntityShaperExpression:
EntityType: CvExperience
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.EndDate.Value - EntityShaperExpression:
EntityType: CvExperience
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.StartDate.Value).TotalDays / 365.25' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
Здесь сказано, что LINQ нельзя напрямую транслировать в SQL. Как мне это сделать?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -framework
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»