0

フィールドを持つユーザーテーブルがありuserdateregistered、現在の月、先月、現在の四半期、前の四半期、今年、昨年に登録されたユーザーを表示したい (日付参照は datetime.now です)。linq クエリを作成する必要があります。

例えば:

2013/12/31 12月(12)の場合

2012/01/15 第1四半期の場合 (1)

2013/05/12 2012年なら

4

1 に答える 1

0

これは、当月のすべてのユーザーを選択するクエリです

DateTime startOfMonth = DateTime.Today.AddDays(1 - DateTime.Today.Day);
DateTime today = DateTime.Today;

var users =
   from u in context.Users
   where EntityFunctions.TruncateTime(u.UserDateRegistered) >= startOfMonth &&
         EntityFunctions.TruncateTime(u.UserDateRegistered) <= today
   select u;

日付によるフィルタリングのアイデアを示しています。適切な開始日と終了日を計算するだけです。EntityFunctions.TruncateTimeメソッドを使用して、日付のみを比較します。


DateRange実際には、開始日と終了日を保持し、いくつかの範囲を作成するためのクラスを作成しました。

public class DateRange
{
    public DateTime BeginDate { get; set; }
    public DateTime EndDate { get; set; }

    public static DateRange OfYear(int year)
    {
        return new DateRange
        {
            BeginDate = new DateTime(year, 1, 1),
            EndDate = new DateTime(year, 12, 31)
        };
    }

    public static DateRange OfMonth(int month)
    {
        var year = DateTime.Today.Year;

        return new DateRange
        {
            BeginDate = new DateTime(year, month, 1),
            EndDate = new DateTime(year, month, 1).AddMonths(1).AddDays(-1)
        };
    }
}

これにより、フィルター範囲を簡単に作成できます。

var range = DateRange.OfMonth(10);
var users =
   from u in context.Users
   where EntityFunctions.TruncateTime(u.UserDateRegistered) >= range.BeginDate &&
         EntityFunctions.TruncateTime(u.UserDateRegistered) <= range.EndDate
   select u;     
于 2013-02-26T23:12:00.390 に答える