如何在c#中从列表中选择元素时排除整数范围



我目前正在编写一个应用程序,可以提取一定数量的航班记录。下面的代码运行正常:

        foreach (var rec in record
            .Skip(GetFlightIndex())
            .Take((int)AppDefaults.NumFlights))

现在,我想排除航班号在特定范围内的航班记录(例如包机等)。由于某种原因,此代码无法工作。有什么想法吗?

        foreach(var rec in records
            .Skip(GetFlightIndex())
            .Take((int)AppDefaults.NumFlights)
            .Where( i =>
                Int32.Parse(i.FLIGHTNO) < 700 && Int32.Parse(i.FLIGHTNO) > 799 &&
                Int32.Parse(i.FLIGHTNO) < 900 && Int32.Parse(i.FLIGHTNO) > 999 &&
                Int32.Parse(i.FLIGHTNO) < 1900 && Int32.Parse(i.FLIGHTNO) > 1999 &&
                Int32.Parse(i.FLIGHTNO) < 8000 && Int32.Parse(i.FLIGHTNO) > 9799 &&
                Int32.Parse(i.FLIGHTNO) < 9900 && Int32.Parse(i.FLIGHTNO) > 9999 ))

where子句中的逻辑不太正确。以下内容不可能是真的:

Int32.Parse(i.FLIGHTNO) < 700 && Int32.Parse(i.FLIGHTNO) > 799

你的意思可能是:

Int32.Parse(i.FLIGHTNO) > 700 && Int32.Parse(i.FLIGHTNO) < 799

另外,一个数字不能在700-799 900-999之间。因此,您需要在每个范围之间使用OR。

Int32.Parse((i.FLIGHTNO) > 700 && Int32.Parse(i.FLIGHTNO) < 799) ||
Int32.Parse((i.FLIGHTNO) > 900 && Int32.Parse(i.FLIGHTNO) < 999) ||
Int32.Parse((i.FLIGHTNO) > 1900 && Int32.Parse(i.FLIGHTNO) < 1999) ||
Int32.Parse((i.FLIGHTNO) > 8000 && Int32.Parse(i.FLIGHTNO) < 9799) ||
Int32.Parse((i.FLIGHTNO) > 9900 && Int32.Parse(i.FLIGHTNO) < 9999)

最后,您可能想要进行过滤,然后获取页面的数据,而不是像您所做的那样——获取页面数据然后进行过滤。要改变这种情况,将Where()移动到Skip()

之前

最新更新