MVC 5 C#-转换<;型号ID,值>;到列表<;型号,值>;

本文关键字:gt 型号 lt 列表 转换 ID MVC C#- | 更新日期: 2023-09-27 18:25:30

我目前正在为一个学校项目构建一个网店,在那里我将ID存储到我的模型中,并将所需计数存储在我的Cart对象中(在Session中)。当客户想要查看他们的购物车时,我需要将ID转换为产品以显示在视图中。一种解决方案是首先获取所有产品,然后再次浏览列表以添加计数,但没有更好的方法将函数中已有的计数添加到我的存储库中吗?

public class CartItem
{
    public int ProductID { get; set; }
    public int Count { get; set; }
}

我制作这个模型是为了放在我的ViewModel中,这是正确的方法还是已经有了数据结构?

public class CartProduct
{
    public Product Product { get; set; }
    public int Count { get; set; }
}

我如何轻松地将一个方法添加到我的存储库中,该方法可以将我的CartItems列表转换为CartProducts列表,而无需为每个条目往返数据库?

很抱歉标题和解释太乱了,我用C#编程才两周。

MVC 5 C#-转换<;型号ID,值>;到列表<;型号,值>;

首先从数据库中获取购物车项目的Products:

var prodIds = cartItems.Select(c => c.ProductID).ToList();

其中cartItems是您的购物车项目的会话内集合。

var productsOfItems = db.Products
                        .Where(p => prodIds.Contains(p.ProductID)
                        .ToList();

现在创建视图模型:

var cartProducts =
(from p in productsOfItems
 join c in cartItems on p.ProductID equals c.ProductID
 select new CartProduct {
                           Product = p,
                           Count = c.Count
                        }).ToList();

您需要更加具体。如果你使用的是类似ORM的实体框架或nhibernate,你可以按产品id分组,然后选择你的cartproduct模型和计数。

 public static List<Client> GetClientsWithTotalOrders()
    { 
       //create DataContext object, use it, discard it:
        using (CodeProjectDataContext db = new GetDataContext())
        {
            //join Client with Order:
            var res = db.Clients  // db is the data context
                .Join(
                db.Orders,
                o => o.ID,
                c => c.ClientID,
                (c, o) => new { c }
                )
                //group by Client
                .GroupBy(o => o.c)
                //define output object
                .Select(o => new { ID = o.Key.ID, AddressID = o.Key.AddressID, 
                Name = o.Key.Name, TotalOrders = o.Count() }) 
               // here you won't select an anonymous type,
              // you will select o => new CartProduct { Count = o.Count(), 
              // Product = new Product { // map your properties } }
                //output to List of objects:
                .ToList()
                ;
             //cast the output sequence to List of Clients and return:
             return (List<Client>)res;
        }
    };