繁体   English   中英

从列表对象转换为C#中的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM