【问题标题】:Find an item in a generic list by specifying multiple conditions通过指定多个条件在通用列表中查找项目
【发布时间】:2012-09-13 12:54:07
【问题描述】:

我们通常会找到带有如下代码的通用列表:

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");

当我们找到通用列表时,请指导我了解多种情况。

【问题讨论】:

  • && 代替 and
  • 如果需要也可以使用|| (视情况而定)

标签: c# linq lambda


【解决方案1】:

试试这个:

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

【讨论】:

  • C# 不是 C++。不需要额外的括号。
  • 是的,谢谢,我知道。但我使用它们来提高可读性。这只是一种成为习惯的代码风格。
  • 如果您有第二个操作的IN CLAUSE 怎么样?
【解决方案2】:

试试这个:

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

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

【讨论】:

    【解决方案3】:

    个人比较喜欢

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

    【讨论】:

    • 我倾向于反转 Equals 以防止 item.ProductName 为空的问题。我会写Items.Find(item => item.ProductId == ProductID && "ABS001".Equals(item.ProductName));,因为您知道“ABS001”在运行前不为空。
    【解决方案4】:

    使用 && 代替 and

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

    【讨论】:

      【解决方案5】:

      当有人用大写的第一个字符命名变量时,我很恼火,所以(productID 而不是 ProductID):

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

      :)

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 1970-01-01
        • 2010-11-13
        • 2012-08-03
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 2014-01-28
        相关资源
        最近更新 更多