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#编程才两周。
首先从数据库中获取购物车项目的Product
s:
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;
}
};