从list对象转换为c#中的类

时间:2013-05-06 12:57:55

标签: c# linq

我是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?如果有人知道请帮助我。谢谢

3 个答案:

答案 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);
}