我是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?如果有人知道请帮助我。谢谢
答案 0 :(得分:6)
创建一个新的ShoppingCart
实例,并将其Products
设置为刚刚生成的排序列表:
return new ShoppingCart { Products = sortedCart.ToList() };
当然这样原来的购物车不会被分类;这将是新的(重复)购物车。如果您想对原始内容进行排序,则应在原始产品集合上使用List<T>.Sort
而不是LINQ:
cart.Products.Sort((x,y) => x.Title.CompareTo(y.Title));
答案 1 :(得分:1)
您需要一种从产品列表中创建购物车的方法。您可以使用现有的setter或构造函数:
public class ShoppingCart
{
public ShoppingCart(List<Product> products)
{
this.Products = products;
}
...
}
然后只是return new ShoppingCart(sortedCart.ToList());
答案 2 :(得分:0)
为什么需要扩展方法?
假设List已经填满了。
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);
}