Я получаю ошибку, потому что не могу создать экземпляр объекта внутри другого - PullRequest
0 голосов
/ 08 марта 2019

Я искал ответ на свой вопрос на этом сайте, но ничего не смог найти.

Мой предыдущий пост был очень длинным, поэтому я постараюсь его улучшить.

У меня есть эта модель:

public class Product : EntityBase
    {
        public string Name { get; set; }
        //attribuitions
        ....
        //Url das images?

        public int? CategoryId { get; set; }
        public virtual Picture Picture { get; set; }
        //More attribuitions
        ....
}

Мне нужно загрузить свойство из режима, но это свойство является виртуальным свойством, и я не собираюсь создавать экземпляр в моей лямбда.Я сделал

var qry = _productRepository.Table.GroupJoin(_categoriesRepository.Table,            
            p => p.CategoryId,
            c => c.Id,
            (p, c) => new { Product = p, Categories = c.DefaultIfEmpty() })
            .Where(hdg => hdg.Product.Hidden == false)

            .SelectMany(final => final.Categories,
            (final, c) => new CatalogItemResponse
            {
                ChildrenCategoryId = final.Product.ChildrenCategoryId,

                DolarRate = 0.0m,
                ResellerPriceUSD = 0.0m,
                ResellerPriceBRL = 0.0m,
                BasePriceBRL = 0.0m,
                BasePriceUSD = 0.0m,

                CategoryId = final.Product.CategoryId,
                CategoryName = (c != null ? c.Name : null),
                PictureId = final.Product.PictureId,
                Description = final.Product.Description,
                ShortDescription = final.Product.ShortDescription,
                Name = final.Product.Name,
                NameHtml = string.IsNullOrEmpty(final.Product.NameHtml) ? final.Product.Name : final.Product.NameHtml,
                PartNumber = final.Product.PartNumber,
                Hidden = final.Product.Hidden,
                Order = final.Product.Order,
                HaveMaximumPercentage = final.Product.HaveMaximumPercentage,
                MaximumPercentage = final.Product.MaximumPercentage,
                HaveMinimumPercentage = final.Product.HaveMinimumPercentage,
                MinimumPercentage = final.Product.MinimumPercentage,
                AuthorizeMaximumPercentageAlteration = final.Product.AuthorizeMaximumPercentageAlteration,
                AuthorizeMinimumPercentageAlteration = final.Product.AuthorizeMinimumPercentageAlteration,
                StandardMarkup = final.Product.StandardMarkup,
                DistributionCenterErpId = final.Product.DistributionCenterErpId,
                PictureFilename = final.Product.Picture.FileName

            }).ToList();

            qry.ForEach(q =>
            {                
                var product = new Product();

                product.CategoryId = q.CategoryId;
                product.AuthorizeMaximumPercentageAlteration = q.AuthorizeMaximumPercentageAlteration;
                product.AuthorizeMinimumPercentageAlteration = q.AuthorizeMinimumPercentageAlteration;
                product.HaveMaximumPercentage = q.HaveMaximumPercentage;
                product.HaveMinimumPercentage = q.HaveMinimumPercentage;
                product.Hidden = q.Hidden;
                product.ChildrenCategoryId = q.ChildrenCategoryId;
                product.Description = q.Description;
                product.DistributionCenterErpId = q.DistributionCenterErpId;
                product.MaximumPercentage = q.MaximumPercentage;
                product.MinimumPercentage = q.MinimumPercentage;
                product.Name = q.Name;
                product.NameHtml = q.NameHtml;
                product.Order = q.Order;
                product.PartNumber = q.PartNumber;
                product.PictureId = q.PictureId;
                product.ShortDescription = q.ShortDescription;
                product.StandardMarkup = q.StandardMarkup;

                var parentProducts = _productService.GetParentsOf(product.Id).Select(x => x.PartNumber);
                q.Parents.AddRange(parentProducts);

               //if (product.PictureId.HasValue)
                    //q.PictureFilename = product.Picture.FileName;

                var price = _erpPriceService.GetPrice(product, 1, resellerId).Result;

                if (price.BasePriceUSD > 0)
                    q.DolarRate = price.BasePriceBRL / price.BasePriceUSD;

                q.ResellerPriceUSD = price.ResellerPriceUSD;
                q.ResellerPriceBRL = price.ResellerPriceBRL;
                q.BasePriceBRL = price.BasePriceBRL;
                q.BasePriceUSD = price.BasePriceUSD;

            });

Но когда я запускаю код выше в закомментированных строках, я получаю исключение NullReference.Это происходит из-за картины, я не могу создать экземпляр этого.Я сделал левое соединение ниже .Where(First query) и ничего.Я пытался поставить .Include так: _productRepository.Table.Include(pic => pic.Picture).GroupJoin и ничего.Я пробовал .Include после .Where и ничего.Другими словами, я сделал много попыток и не получил.Я пытался анонимно е ничего.Что я делаю?Что я не так делаю?

РЕДАКТИРОВАТЬ1

Если я поставлю .Include вот так

var qry = _productRepository.Table.Include(pic => pic.Picture).GroupJoin(_categoriesRepository.Table,
            p => p.CategoryId,
            c => c.Id,
            (p, c) => new { Product = p, Categories = c.DefaultIfEmpty() })
            .Where(hdg => hdg.Product.Hidden == false)

            .SelectMany(final => final.Categories,
            (final, c) => new CatalogItemResponse
            {
                ChildrenCategoryId = final.Product.ChildrenCategoryId,
                ................... //Attribuitions below

Я думаю, что мне не нужноnew Product() внутри qry.ForEach, правильно?Тогда как мне сделать, мне нужно сделать new Product()?Ввод include я не знаю что и как делать.

1 Ответ

1 голос
/ 08 марта 2019

Убедитесь, что вы устанавливаете Picture в ForEach. Хотя проблема, скорее всего, связана с тем, что вы не включили в свой запрос сущность Picture для Product. Попробуйте добавить его к GroupJoin при условии, что Picture.Id == Product.PictureId.

Вы также можете использовать более удобную .Include до eager load сущность Picture.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...