Я искал ответ на свой вопрос на этом сайте, но ничего не смог найти.
Мой предыдущий пост был очень длинным, поэтому я постараюсь его улучшить.
У меня есть эта модель:
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
я не знаю что и как делать.