LINQ-запрос, чтобы проверить, находится ли почтовый индекс в диапазоне начальных и конечных почтовых индексов? - PullRequest
1 голос
/ 03 ноября 2011

Мне нужно проверить, находится ли почтовый индекс в пределах заданного начального и конечного почтового индекса, используя 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());

Ответы [ 4 ]

2 голосов
/ 03 ноября 2011

Попробуйте CompareTo для строк.Это работает?

var query =
    from s in stations
    where postcode.CompareTo(s.FromPostcode) >= 0
    where postcode.CompareTo(s.ToPostcode) <= 1
    select s;
1 голос
/ 03 ноября 2011

Я предположил, что естественный порядок строк - это то, что вы подразумеваете под «между».Если это не так, вы должны взглянуть на интерфейс 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"},
        };
    }
}
0 голосов
/ 03 ноября 2011

У меня есть список, в котором каждый объект DestinationStation имеет FromPostcode и ToPostcode, они являются строками. Мне нужно проверить, находится ли данный почтовый индекс в пределах любого от FromPostcodes и ToPostcodes для данного объекта DestinationStation ... Имеет смысл?

(мой акцент)

Похоже, вы хотите использовать оператор 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);
0 голосов
/ 03 ноября 2011

Предполагая, что используемые вами почтовые индексы являются целыми или похожими (не все почтовые индексы, например, почтовые индексы Великобритании похожи на SW1A 1AA).

Console.WriteLine( stations.Any(station => postCode >= station.FromPostcode && station <= station.ToPostcode) );

Edit:

Поскольку почтовый индекс Великобритании определяет четыре различных уровня географической единицы, вам необходимо разделить составные части, чтобы их можно было сравнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...