如何从C#中的列表中选择元素时排除整数范围?

时间:2014-07-02 00:47:46

标签: c# asp.net-mvc

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

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

1 个答案:

答案 0 :(得分:1)

where子句中的逻辑不太正确。以下情况永远不会成真:

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

你可能意味着:

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

此外,数字永远不会介于700-799 AND 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()