Смешивание локальных списочных операций с linq для операций с базами данных сущностей - PullRequest
3 голосов
/ 18 мая 2011

У меня есть 2 списка.Список корзины покупок, который содержит объекты со свойствами;Quantity и ProductId.Затем я получаю все продукты из репозитория (IQueryable), в списке которого есть ProductId.Это означает, что для каждого продукта есть объект корзины покупок с Quantity, связанным с ним.

При выполнении выбора я хочу назначить также Quantity, но единственный известный мне способсделать это, чтобы запросить корзину еще раз.

Для egx.

        model = (from p in productService.GetAllProducts()
                              where cart.Entries.Select(c => c.ProductId).Contains(p.ProductId)
                              select new CartViewItem
                                         {
                                             Price = p.Price,
                                             ProductId = p.ProductId,
                                             ProductName = p.ProductName,
                                             Quantity = cart.Entries.FirstOrDefault(c => c.ProductId == p.ProductId).Quantity
                                         }).ToList();

Модель:

public class ShoppingCartEntry
{
    public int ProductId { get; set; }
    public int Quantity { get; set; }
}

cart.Entries не поступает из хранилища.productService.GetAllProducts() возвращает IQueryable объектной рамки.

РЕДАКТИРОВАТЬ : Мой новый код:

        model= (from p in productService.GetAllProducts()
                              from c in cart.Entries
                              where c.ProductId == p.ProductId
                              select new CartViewItem
                                         {
                                             Price = p.Price,
                                             ProductId = p.ProductId,
                                             ProductName = p.ProductName,
                                             Quantity = c.Quantity
                                         }).ToList();

Это приводит к ошибке: Unable to create a constant value of type 'SampleApp.WebUI.Models.ShoppingCartEntry'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

1 Ответ

3 голосов
/ 18 мая 2011

я думаю, что это должно работать ...

var model = (from c in cart.Entires  // The small local cart collection
             let cpid = cart.Entires.Select(c2 => c2.ProjectId) // 
             from p in productService.GetAllProducts() // Query all Products used in cart
                               .Where(queryp => cpid.Contains(queryp.ProjectId)).ToList()
             where p.ProductId == c.ProductId
             select new CartViewItem {
                 p.Price,
                 p.ProductId,
                 p.Brand,
                 p.ProductName,
                 Discount = p.DiscountPercent * c.Quantity}).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...