我有一个列表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
是传递给方法的参数。现在,如果line
为null
,我可以轻松地将项目添加到linecollection
。如果不是null
,那么我只想将quantity
(传递给方法的另一个参数)添加到列表中搜索项目的Quantity
。
我怎样才能做到这一点?
答案 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
相等。