1

レコードに次のような値を持つ日付フィールド列があるデータテーブルがあります

11/1/2012
12/21/2012
12/22/2012
1/3/2013
1/5/2013
1/6/2013
1/7/2013
etc. 

レコードをフィルタリングして、現在の月のレコードのみを取得します。つまり、日付が現在の月と等しい行のみを取得します (これは DateTime.now によって検出されます)。Linq と c# を使用してこれを行うにはどうすればよいでしょうか。

4

2 に答える 2

8

列のタイプがすでにある場合DateTime

DateTime now = DateTime.Now;
var thisMonthRows = table.AsEnumerable()
    .Where(r =>  r.Field<DateTime>("ColumnName").Year  == now.Year
              && r.Field<DateTime>("ColumnName").Month == now.Month);

フィルタリングされた行から新しいDataTableが必要な場合は、次を使用しますCopyToDataTable

DataTable table = thisMonthRows.CopyToDataTable();
于 2013-01-23T10:40:18.643 に答える
1

月の最初の日を取得し、その日付でフィルター処理します。

 DateTime today = DateTime.Now.Date;
 DateTime firstDayOfMonth = today.AddDays(1 - today.Day);
 // or new DateTime(today.Year, today.Month, 1);

 var query = from row in dt.AsEnumerable()
             where row.Field<DateTime>("Date") >= firstDayOfMonth
             select row;

もちろん、これは、将来の日付を含むレコードがない場合 (たとえば、翌月) に機能します。その場合は、新しい範囲変数を導入して、日付を 2 回解析しないようにすることをお勧めします。

 var query = from row in dt.AsEnumerable()
             let date = row.Field<DateTime>("Date")
             where date.Year == today.Year && 
                   date.Month == today.Month
             select row;
于 2013-01-23T10:41:49.580 に答える