LINQ查询以检查邮政编码是不是在起始和结束邮政编码范围内?
Posted
技术标签:
【中文标题】LINQ查询以检查邮政编码是不是在起始和结束邮政编码范围内?【英文标题】:LINQ query to check if a postcode is within a range of starting and ending postcodes?LINQ查询以检查邮政编码是否在起始和结束邮政编码范围内? 【发布时间】:2011-11-03 01:11:23 【问题描述】:我需要使用 linq 检查邮政编码是否在给定的开始和结束邮政编码内。
这是我到目前为止所拥有的,但它根本不对,有人能指出我正确的方向吗?
List<DestinationStation> stations = DestinationStation.GetDestinationStations();
var query = from s in stations
where postcode <= s.FromPostcode && postcode >= s.ToPostcode
select s;
Console.WriteLine(query.ToList());
【问题讨论】:
通常邮政编码为字符串格式以适应“0213”。所以只是检查邮政编码的数据值是多少,你能举个例子吗?有时邮政编码包含字母数字 您说要检查 a 邮政编码,但您的代码似乎检查了一个邮政编码所属的范围。你到底想要什么?您当前的代码有什么问题?您的邮政编码是什么数据类型,可能的值是什么?您是否在了解美国邮政编码或其他信息? 邮政编码为英国格式 TW4 6JS 我有一系列邮政编码,我需要查看我传入的邮政编码是否属于 fromPostcode 和 toPostCode。 所以你有一个范围?为什么你的代码有一个范围列表呢?再说一遍,您当前的代码有什么问题? 我有一个 List尝试CompareTo
获取字符串。这行得通吗?
var query =
from s in stations
where postcode.CompareTo(s.FromPostcode) >= 0
where postcode.CompareTo(s.ToPostcode) <= 1
select s;
【讨论】:
@CarlWeis - 更改为支持字符串。 为什么要使用CompareTo()
而不是普通的比较运算符,如>=
或<
用于字符串?
@svick - 因为在使用字符串进行比较时出现此错误“运算符'>='不能应用于'字符串'和'字符串'类型的操作数”。
@svick >=
或 <
不是字符串的正常比较运算符。它们不存在。
这不适用于以下情况: - 需要一个数字邮政编码,但包含一个 alpha 字符 - 需要一个 4 字符的邮政编码,但给定一个 5 字符的邮政编码【参考方案2】:
我假设字符串的自然顺序就是您所说的“介于”之间。如果不是这样,您应该查看 IComparable 接口以更好地控制排序。
我还进行了排他性比较。不过,您可以更改运算符以使其具有包容性。
class Program
static void Main(string[] args)
var postcode = "B";
var stations = DestinationStation.GetDestinationStations();
var query = from s in stations
where postcode.CompareTo(s.FromPostcode) > 0 && postcode.CompareTo(s.ToPostcode) < 0
select s;
Console.WriteLine(query.ToList());
public class DestinationStation
public string FromPostcode;
public string ToPostcode;
public static List<DestinationStation> GetDestinationStations()
return new List<DestinationStation> new DestinationStation FromPostcode = "A", ToPostcode = "C",
new DestinationStation FromPostcode = "A", ToPostcode = "A",
new DestinationStation FromPostcode = "C", ToPostcode = "C",
new DestinationStation FromPostcode = "C", ToPostcode = "A",
;
【讨论】:
【参考方案3】:假设您使用的邮政编码是整数或类似的(并非所有邮政编码都如此,例如英国邮政编码类似于 SW1A 1AA)。
Console.WriteLine( stations.Any(station => postCode >= station.FromPostcode && station <= station.ToPostcode) );
编辑:
由于英国邮政编码定义了四个不同级别的地理单位,您需要将组成部分分开,以便进行比较。
【讨论】:
【参考方案4】:我有一个 List,其中每个 DestinationStation 对象都有一个 FromPostcode 和一个 ToPostcode,它们是字符串。我需要检查给定的邮政编码是否在给定 DestinationStation 对象的 FromPostcodes 和 ToPostcodes 的 any 内...有意义吗?
(我的重点)
听起来您想使用Any
运算符。它返回true
是否找到'any',否则返回false
。
List<DestinationStation> stations = DestinationStation.GetDestinationStations();
var exists = stations.Any(s =>
postcode <= s.FromPostcode && postcode >= s.ToPostcode);
if (exists)
Console.WriteLine("It's within a range");
如果您想查找您的邮政编码是在哪个范围内找到的,请执行 where / single / first。
var all = stations.Where(s =>
postcode <= s.FromPostcode && postcode >= s.ToPostcode);
var first = stations.First(s =>
postcode <= s.FromPostcode && postcode >= s.ToPostcode);
var only = stations.Single(s =>
postcode <= s.FromPostcode && postcode >= s.ToPostcode);
【讨论】:
以上是关于LINQ查询以检查邮政编码是不是在起始和结束邮政编码范围内?的主要内容,如果未能解决你的问题,请参考以下文章