1

LINQクエリに小さな問題があります。

基本的に私は日付で満たされた2つのリストを持っています。

List<DateTime> start = GetListOfStartDates();
List<DateTime> end = GetListOfEndDates();
DateTime date = new DateTime(2012, 1, 1);

基本的に次の意味で、日付を開始日と終了日と比較するLINQクエリを実行するにはどうすればよいですか。

(start <= date && end >= date)

明らかに私はそれらがリストであることを理解しているので、これは機能しません。1つの日付を2つの日付リストと比較するにはどうすればよいですか?基本的に、一連の日付に対して間を実行します。

開始インデックスは常に終了インデックスと一致し、start[7]常に一致しend[7]ます。betweenmysql -queryをLINQに変換しようとしています。したがって、指定された「日付」が開始と終了のペア内にあるかどうかを探しています。

4

3 に答える 3

3

OPの目標の別の解釈:

bool b = start.Zip(end, (x, y) => new { Start = x, End = y })
              .Any(z => z.Start <= date && z.End >= date);

All()または、ロジックに応じて、代わりに使用することもできます。

于 2012-08-08T13:06:22.757 に答える
2

私があなたの質問を正しく解釈していると仮定すると (上記の私のコメントを参照)、これを LINQ クエリではなく for ループとして実行する方がよいと思います。私はこのようなことをします:

public bool DateFallsInRange(IEnumerable<DateTime> startDates, IEnumerable<DateTime> endDates)
{
    for (int index = 0; index < startDates.Count; index++)
    {
        if ((startDates[index] <= compareDate) && (compareDate <= endDates[index])) return true;
    }
    return false;
}
于 2012-08-08T13:05:45.297 に答える
0

開始リストと終了リストのインデックスは同じでなければなりませんか? 例:

start|end
[0]1940|1950
[1]1890|1930

1890 < 1931 < 1950 であるため、1931 年の日付は過ぎるべきですか? それとも、1931<1940 および 1931>1930 という理由で合格すべきではないのですか?

于 2012-08-08T13:05:07.807 に答える