[英]Cast from list object to class in c#
我是linq和C#的新手。 在这里,我面临的一个问题是,我必须对模型进行建模
public class Product
{
public int ItemID { get; private set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime AuctionEndDate { get; set; }
public int Price { get; set; }
}
public class ShoppingCart
{
public List<Product> Products { get; set; }
}
在这里,我想创建一个扩展方法,对购物车中的所有项目进行排序。
public static ShoppingCart Sort(this ShoppingCart cart)
{
var sortedCart = from item in cart.Products
orderby item.Title ascending
select item;
return sortedCart.ToList();
}
因此,该方法将不允许我返回sortedCart.ToList()
,因为其中包含List。 我该如何退还shoppingCart? 如果有人知道,请帮助我。 谢谢
创建一个新的ShoppingCart
实例,并将其Products
设置为您刚生成的排序列表:
return new ShoppingCart { Products = sortedCart.ToList() };
当然,这样一来,原始购物车将不会被分类。 这将是新的(重复的)购物车。 如果要对原位进行排序,则应使用List<T>.Sort
对原始产品集而不是LINQ进行排序:
cart.Products.Sort((x,y) => x.Title.CompareTo(y.Title));
您需要一种从产品列表创建购物车的方法。 您可以使用现有的setter或构造函数:
public class ShoppingCart
{
public ShoppingCart(List<Product> products)
{
this.Products = products;
}
...
}
然后只return new ShoppingCart(sortedCart.ToList());
为什么需要扩展方法?
假设列表已经被填充。
shoppingCart.Products.OrderBy(x => x.Title);
或使用扩展方法
public static void Sort(this ShoppingCart cart)
{
cart.Products = (from item in cart.Products
orderby item.Title ascending
select item).ToList();
}
要么
public static void Sort(this ShoppingCart cart)
{
shoppingCart.Products.OrderBy(x => x.Title);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.