通过指定多个条件在通用列表中查找项目

24

通常我们会发现像这样的通用列表代码:

CartItem Item = Items.Find(c => c.ProductID == ProductID);
Item.Quantity = Quantity;
Item.Price = Price;

所以上面的代码可以找到并更新数据,但如果我想按多个条件查找,应该如何编写代码?

我想写出这样的代码:

CartItem Item = Items.Find(c => c.ProductID == ProductID and c.ProductName == "ABS001");
请指导我如何在查找泛型列表时处理多个条件。

7
改为用“&&”代替“和”。 - Mark
1
如果需要,您也可以使用||(取决于条件)。 - goGud
5个回答

68
请尝试这个:
CartItem Item = Items.Find(c => (c.ProductID == ProductID) && (c.ProductName == "ABS001"));

5
C#不是C++,不需要额外的括号。 - Dennis
20
好的,我知道了。但是我使用它们来提高可读性。这只是一个编程风格,已成为一种习惯。 - Anton Sizikov
如果第二个操作有一个IN CLAUSE怎么办? - Mark
类似这样的东西:(https://dev59.com/vXNA5IYBdhLWcg3wcNbF)? - Anton Sizikov

11

试试这个:

Items.Find(c => c.ProductID == ProductID && c.ProductName == "ABS001");

lambda表达式的主体就是一个方法。您可以在其中使用所有语言结构,就像常规方法一样。


5

就我个人而言,我更喜欢

Items.Find(item => item.ProductId == ProductID && item.ProductName.Equals("ABS001"));

1
我倾向于反转Equals以避免item.ProductName为空的问题。我会写Items.Find(item => item.ProductId == ProductID && "ABS001".Equals(item.ProductName));因为你知道"ABS001"在运行时不为空。 - Jay

3

使用&&代替and

var result = Items.Find(item => item.ProductId == ProductID && item.ProductName == "ABS001");

0

当有人用大写字母命名变量时,我感到很烦恼,例如(productID而不是ProductID):

CartItem Item = Items.Find(c => (c.ProductID == productID) && (c.ProductName == "ABS001"));

:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接