2016-07-05 4 views
-1

を使用してヌルであるかどうかを、以下に示すように、私は日付がnullになる可能性があるのオブジェクトのリストを持って、一つの条件についてはフィルタリングリスト日はLINQクエリ

List<SomeObjects> myList: 
myList[0] = id:1, Date:3/3/2016 
myList[1] = id:2, Date:NULL 
myList[2] = id:3, Date:3/3/2016 
myList[3] = id:4, Date:NULL 

私はとして日付ごとにこのリストをソートする必要があります示す:

var comparingDays = DateTime.Today; 
var resultsFrom = "past 7 days"; 
comparingDays.AddDays(-7);      
myList.Where(t =>t.Date.HasValue ? Convert.ToDateTime(t.Date) >= comparingDays :).ToList(); 

日がnullの場合、私はそれらの結果を必要としませんが、私はここにhasValueはの偽条件で進行する方法を苦労しています。 「日付」は日時がある場合

+0

「DateTime.MaxValue」または「DateTime.MinValue」を使用します。 – GreatAndPowerfulOz

+3

サイドノート、 'comparisonDays = comparisonDays.AddDays(-7); 'を使用してください –

+0

どのタイプが' t.Date'ですか?それが文字列の場合、以下の答えはすべて無効です。 –

答えて

3

?あなたがそうのようなあなたのクエリを変更することができます。

myList 
    .Where(t =>t.Date.HasValue && t.Date.Value >= comparingDays).ToList() 

だからあなたはnull日付がフィルタリングされ、その後、あなたが安全に日付値を比較することができます。

2

Where(フィルター)とOrderBy(ソート)の組み合わせは動作するはずです:

List<SomeObjects> results = myList.Where(t => t.Date.HasValue && t.Date >= comparingDays) 
            .OrderBy(t => t.Date).ToList(); 
+0

ソートはタイトルではあったものの、問題ではありませんでした。 –

1

をt.Dateは日時がある場合には(変換がそのに疑問を投げる)、あなたは、単に使用することができます

// myList 
// .Where(t =>t.Date.HasValue ? Convert.ToDateTime(t.Date) >= comparingDays :) 
// .ToList(); 

myList.Where(t => t.Date >= comparingDays).ToList() 

nullは、どのDate値よりも大きくない(または小さい)ためです。