我正在编写一个可以提取一定数量航班记录的应用程序。以下代码正常运行:
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 ))
答案 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()