1

たとえば、DateTimeいくつかのフィールドが設定された があります。のみMonthDayマスクです。そして、このマスクを使用して DateTime のリストをフィルター処理します。

X がmask と同じMonth と Day を持つ場合は X に一致し、 mask が未設定 (ゼロ) の場合は他のフィールドのその他の値に一致します。

もちろん、可能なフィールドごとに多くの比較を行うことはできますが、.NET ライブラリを信じています。LINQ の有無にかかわらず、これを行う良い方法を探しています。

これの実世界での使用法は、年を指定して今年の対応するすべてのエントリを検索したり、月と日を指定してこれらの月と日 (任意の年と時刻) のすべてを検索したりするようなものです。

編集:「2010」と「2010/02/01」を表す日付が何らかの関係にあることをネイティブに伝える方法を探しています(基本的に、「2010」には「2010/02/01」がより具体的に含まれます)。以前「2010」マスクと呼んでいました。

4

2 に答える 2

0

アイデア:

        List<DateTime> dt = new List<DateTime>();
        dt.Add(new DateTime(2010, 11, 11));
        dt.Add(new DateTime(2010, 7, 25));
        dt.Add(new DateTime(2011, 5, 11));
        dt.Add(new DateTime(2011, 11, 13));
        dt.Add(new DateTime(2013, 7, 13));
        dt.Add(new DateTime(2013, 1, 13));
        dt.Add(new DateTime(2012, 1, 11));

        string userInputMask = "201_-07-__";
        string mask = userInputMask.Replace("_",@"\d");
        var result = dt.Where(a => Regex.IsMatch(@String.Format("{0:yyyy-MM-dd}", a), @mask));

        result.ToList().ForEach(a=>Console.WriteLine(a));

結果:

2010-07-25 00:00:00

2013-07-13 00:00:00

\dは数字を意味します。簡単にするために、ユーザーは下線文字などのマスクされた数字を入力します

于 2013-08-07T14:05:48.790 に答える