1

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

4 に答える 4

2

文字列を試してくださいCompareTo。これは機能しますか?

var query =
    from s in stations
    where postcode.CompareTo(s.FromPostcode) >= 0
    where postcode.CompareTo(s.ToPostcode) <= 1
    select s;
于 2011-11-03T01:18:56.277 に答える
1

文字列の自然順序は、「間」の意味であると思います。それが当てはまらない場合は、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"},
        };
    }
}
于 2011-11-03T01:42:29.903 に答える
0

使用している郵便番号が整数または類似のものであると仮定します(すべての郵便番号がそうであるとは限りません。たとえば、英国の郵便番号はSW1A 1AAのようなものです)。

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

編集:

英国の郵便番号は地理的単位の4つの異なるレベルを定義しているため、それらを比較できるように、構成要素を分離する必要があります。

于 2011-11-03T01:30:53.893 に答える
0

各DestinationStationオブジェクトにFromPostcodeとToPostcodeがあるリストがあります。これらは文字列です。特定の郵便番号が特定のDestinationStationオブジェクトのFromPostcodesおよびToPostcodesのいずれかに含まれているかどうかを確認する必要があります...意味がありますか?

(私の強調)

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);
于 2011-11-03T02:25:36.187 に答える