如何在linq列表中查找2个数字之间的所有匹配项

本文关键字:之间 数字 2个 linq 列表 查找 | 更新日期: 2023-09-27 18:01:10

我有一个人员列表,其中一个属性是字符串形式的数字,我想在该列表中找到与2个数字(一个范围(匹配的所有匹配项。

    public class car
    {
        public string Name { get; set; }
        public string No { get; set; } 
    }

    public void test()
    {
        var myList = new List<car>
        {
            new car {Name = "Volvo", No = "10"},
            new car {Name = "Volvo", No = "20"},
            new car {Name = "Volvo", No = "30"},
            new car {Name = "Volvo", No = "40"},
            new car {Name = "Volvo", No = "50"},
            new car {Name = "Volvo", No = "60"}
        };
        var startNumber = 10;
        var EndNumber = 30;

    }

如果No在startNumberEndNumber内,我如何过滤掉myList中的所有匹配项?

如何在linq列表中查找2个数字之间的所有匹配项

这是一个非常简单的解决方案:

myList
    .Where(car => startNumber <= int.Parse(car.No) && int.Parse(car.No) <= EndNumber)
    .ToList();

注意:如果我们不能假设No只包含自然数,那么使用int.TryParse将是比int.Parse更好的选择。

备注:

  1. 强烈建议您将No保存为int,而不是string
  2. 此外,在属性名称上也不要便宜,如果你将使用NumberLicensePlate,它会更长,但更简洁
  3. 您应该遵循.NET命名约定,使用带有大写字母的类名。例如:CarAnimal
  4. Local variables中的第一个字母应小写。例如:endNumber
  5. 在使用诸如intdouble等原始变量时,最好避免使用var`

您必须将数字解析为整数,然后比较范围。您也可以使用Int.TryParse将自己从异常中拯救出来。要进行一次解析,请创建一个匿名类型,然后查询如下:

int temp;
var query = myList.Select(r => new 
                            { 
                                Car = r, 
                                NumericNo = int.TryParse(r.No, out temp) ? temp : 0 //or -1 for invalid values
                            })
    .Where(r => r.NumericNo >= start && r.NumericNo <= end)
    .Select(r => r.Car);

您也可以遵循通用命名惯例