0

我有一个客户列表:

List<customer> customerList;

我只想获得 Country="India" 和 Status="A" 的客户。

我试过这个:

List<customer> customerList=customerList.Where(p=>p.Country.Equals("India") && p.Status.Equals("A")).ToList();

List<customer> customerList=customerList.Where(p=>p.Country.Equals("India")).Where(p=>p.Status.Equals("A")).ToList();

但两者都没有返回任何东西。

如果我像下面的示例那样划分条件,那么记录将被正确获取。

List<customer> customerList=customerList.Where(p=>p.Country.Equals("India")).ToList();
customerList=customerList.Where(p=>p.Status.Equals("A")).ToList();

我想知道如何在单个查询中使用 AND 条件过滤对象。

谁能告诉,有什么好方法而不是调用 where 条件。

4

2 回答 2

3

.Equals在这种情况下不要使用。使用相等运算符 (==)。

customerList.Where(p=>p.Country == "India" && p.Status == "A").ToList();

Jon Skeet 文章 - 我应该什么时候使用 ==,什么时候应该使用 Equals?

对于值类型,我通常使用 == 来获得更易于阅读的代码。如果值类型为 == 提供与 Equals 不同的重载,事情就会变得棘手,但我认为这种类型一开始设计的非常糟糕。

但是,您绝对需要确保您的列表实际已填充。

于 2012-10-11T14:02:46.317 回答
0

这按预期工作,所以我不知道你在做什么,但你原来的方法是正确的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4 {
    public class Customer {
        public string Country { get; set; }
        public string Status { get; set; }
    }

    class Program {
        static void Main(string[] args) {
            var list = new List<Customer>();
            list.Add(new Customer() { Country = "India", Status = "A" });
            list.Add(new Customer() { Country = "USA", Status = "A" });

            var results = list.Where((c) => c.Country == "India" && c.Status == "A");

            if (results.Any()) {
                Console.WriteLine(results.First().Country);
            }

            Console.ReadLine();
        }
    }
}
于 2012-10-11T14:06:45.153 回答