У меня проблемы с использованием Kendo Grid и Linq. Я использую kendo только в бэкэнде, чтобы упростить фильтрацию и сортировку. Все работало нормально, пока я не коснулся объекта, который имеет связанные объекты. Мои объекты базовые объекты не загружены в мое расширениеметод, но если я использую инициализацию объекта в методе выбора linq, он работает нормально.Может быть, моего знания linq недостаточно, но я хочу узнать, что за фокус здесь происходит?Любая помощь будет принята с благодарностью.
Мой метод расширения, который дает мне ViewModel:
public static MeetingRoomCultureListViewModel ToMeetingRoomCultureListViewModel(this MeetingRoomCulture meetingRoomCulture) {
var viewModel = new MeetingRoomCultureListViewModel();
viewModel.Id = meetingRoomCulture.BaseEntityId;
viewModel.CancellationDuration = meetingRoomCulture.BaseEntity.CancellationDuration;
viewModel.MinimumMeetingDuration = meetingRoomCulture.BaseEntity.MinimumMeetingDuration;
viewModel.OnlyAdminsCanReserve = meetingRoomCulture.BaseEntity.OnlyAdminsCanReserve;
viewModel.Price = meetingRoomCulture.BaseEntity.Price;
viewModel.SaltoLockId = meetingRoomCulture.BaseEntity.SaltoLockId;
viewModel.Status = meetingRoomCulture.Status;
viewModel.Capacity = meetingRoomCulture.BaseEntity.Capacity;
viewModel.CleaningDuration = meetingRoomCulture.BaseEntity.CleaningDuration;
viewModel.Color = meetingRoomCulture.BaseEntity.Color;
viewModel.Currency = meetingRoomCulture.BaseEntity.Currency;
viewModel.IsHidden = meetingRoomCulture.BaseEntity.IsHidden;
viewModel.LocationId = meetingRoomCulture.BaseEntity.LocationId;
viewModel.LocationName = meetingRoomCulture.BaseEntity.Location.Name;
viewModel.MaximumDaysForReservationInFuture = meetingRoomCulture.BaseEntity.MaximumDaysForReservationInFuture;
viewModel.PictureUrl = meetingRoomCulture.BaseEntity.PictureUrl;
viewModel.Name = meetingRoomCulture.BaseEntity.Name;
viewModel.TaxRatio = meetingRoomCulture.BaseEntity.TaxRatio;
viewModel.MaximumMeetingDuration = meetingRoomCulture.BaseEntity.MaximumMeetingDuration;
viewModel.CreatedDate = meetingRoomCulture.CreatedDate;
viewModel.LastModifiedDate = meetingRoomCulture.LastModifiedDate;
return viewModel;
}
Вот этот BaseEntity не загружается, и я получаю исключение нулевой ссылки.
И мой метод API:
public IActionResult Get([FromQuery] [DataSourceRequest] DataSourceRequest request) {
var ds = _dbContext.MeetingRoomCultures.AsNoTracking().Include(x => x.BaseEntity).ThenInclude(x => x.Location).CultureFilter(CurrentCulture)
.Select(x => x.ToMeetingRoomCultureListViewModel()).ToDataSourceResult(request);
return Ok(ds);
}
Однако, если я использую инициализацию объекта, все работает нормально, и Базовая сущность загружается, исключений не происходит. Как ниже:
public IActionResult Get([FromQuery] [DataSourceRequest] DataSourceRequest request) {
var ds = _dbContext.MeetingRoomCultures.AsNoTracking().Include(x => x.BaseEntity).ThenInclude(x => x.Location).CultureFilter(CurrentCulture)
.Select(x => new MeetingRoomCultureListViewModel()
{
Id = x.BaseEntityId,
CancellationDuration = x.BaseEntity.CancellationDuration,
MinimumMeetingDuration = x.BaseEntity.MinimumMeetingDuration,
OnlyAdminsCanReserve = x.BaseEntity.OnlyAdminsCanReserve,
Price = x.BaseEntity.Price,
SaltoLockId = x.BaseEntity.SaltoLockId,
Status = x.Status,
Capacity = x.BaseEntity.Capacity,
CleaningDuration = x.BaseEntity.CleaningDuration,
Color = x.BaseEntity.Color,
Currency = x.BaseEntity.Currency,
IsHidden = x.BaseEntity.IsHidden,
LocationId = x.BaseEntity.LocationId,
LocationName = x.BaseEntity.Location.Name,
MaximumDaysForReservationInFuture = x.BaseEntity.MaximumDaysForReservationInFuture,
PictureUrl = x.BaseEntity.PictureUrl,
Name = x.BaseEntity.Name,
TaxRatio = x.BaseEntity.TaxRatio,
MaximumMeetingDuration = x.BaseEntity.MaximumMeetingDuration,
CreatedDate = x.CreatedDate,
LastModifiedDate = x.LastModifiedDate
}).ToDataSourceResult(request);
return Ok(ds);
}