使用LINQ更新列表<t>

时间:2016-07-18 13:05:35

标签: c# linq

我有一个列表List<CartLine> linecollection,其中CartLine是由类定义的自定义数据类型

class CartLine
{ 
    public Product {get;set;}
    public Quantity {get;set;}
}

现在我想使用LINQ作为CartLine line = linecollection.Where(P=>P.Product.ProductId==product.ProductID).FirstOrDefault()在我的列表中搜索,其中小写product是传递给方法的参数。现在,如果linenull,我可以轻松地将项目添加到linecollection。如果不是null,那么我只想将quantity(传递给方法的另一个参数)添加到列表中搜索项目的Quantity

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

class Program
    {
        static List<CartLine> linecollection = new List<CartLine>();

        static void Main(string[] args)
        {
            ProductClass product = new ProductClass() { ProductID = 0 };

            linecollection.Add(new CartLine() { Product = product, Quantity = 80 });
            linecollection.Add(new CartLine() { Product = new ProductClass() { ProductID = 1 }, Quantity = 60 });
            linecollection.Add(new CartLine() { Product = new ProductClass() { ProductID = 2 }, Quantity = 40 });

            CartLine line = linecollection.Where(P => P.Product.ProductID == product.ProductID).FirstOrDefault();
            if (line == null)
                linecollection.Add(new CartLine() { Quantity = 100 });
            else
                line.Quantity = 100;
        }
    }

    class CartLine
    {
        public ProductClass Product
        {
            get; set;
        }
        public int Quantity
        {
            get; set;
        }
    }

    class ProductClass
    {
        public int ProductID
        {
            get; set;
        }
    }

您还可以将LINQ查询缩短为:

CartLine line = linecollection.Where(P => P.Product == product).FirstOrDefault();

答案 1 :(得分:0)

由于CartLine是一个类,LINQ语句返回对实际列表成员的引用。可以按如下方式添加quantity

if (line is CartLine)
{
    line.Quantity += quantity;
}

答案 2 :(得分:0)

当您查询 返回项目并更新此项目时,列表中的引用也会更新。所以当使用

CartLine line = linecollection.Where(P => P.Product.ProductId == product.ProductID).FirstOrDefault();
line.Quantity = ...

此列表中的项目也会更新,因为它只是引用您使用查询检索的相同项目。这是引用类型的基础知识。您的列表只会将引用包含在您的实际对象中,因此每当您更新这些对象的任何实例时,这些更改都会反映在所有引用中 - 例如在列表中。

您可以通过从列表中重新查询您的项目并获取其数量来检查:

var updatedQuantity = linecollection.Where(P => P.Product.ProductId == product.ProductID).First().Quantity;

现在应该与您设置的quantitty相等。