如何在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在startNumber
和EndNumber
内,我如何过滤掉myList中的所有匹配项?
这是一个非常简单的解决方案:
myList
.Where(car => startNumber <= int.Parse(car.No) && int.Parse(car.No) <= EndNumber)
.ToList();
注意:如果我们不能假设No
只包含自然数,那么使用int.TryParse
将是比int.Parse
更好的选择。
备注:
- 强烈建议您将
No
保存为int
,而不是string
- 此外,在属性名称上也不要便宜,如果你将使用
Number
或LicensePlate
,它会更长,但更简洁 - 您应该遵循.NET命名约定,使用带有大写字母的类名。例如:
Car
、Animal
Local variables
中的第一个字母应小写。例如:endNumber
- 在使用诸如
int
、double
等原始变量时,最好避免使用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);
您也可以遵循通用命名惯例