-1

この例でクエリを作成する方法を知りたいです。

UserID、UserName、DateRegistered、およびロールを持つユーザー テーブルがあります。2つのコンボボックスを選択してクエリを作成したいのですが、各コンボボックスには次のものがあります: -期間登録ユーザー(当月、先月、現在の15日間、過去15日間、今年と昨年)

combobox選択したアイテムを参照する結果クエリをグリッドに表示したい。例: 過去 15 日間にステータス管理者に登録されたユーザー。

私はそれを行う方法を考えていますが、一般的なことをしたいので、期間に応じてあまり多くのクエリを実行したくありません。私はEntityFrameworkを使用しています。

これは、ピリオドの変換と、現在の過去 15 日間ではない場合の比較方法がわからないため、私が想定するコードの単なる例ではありません。

    string period = dropDownList.SelectedValue.ToString();
    DateTime StarPeriode= new DateTime();
    switch (option.ToUpper())
    {
        case "0":
            // CURRENT 15 days
            StarPeriode = DateTime.Now.Subtract(-15);
            break;
        case "1":
            // LAST 15 days
            StarPeriode = DateTime.Now.Subtract(-30);
            break;
        case "2":
            // CURRENT MONTH
            break;
        case "3":
            // LAST MONTH
            break;
        case "4":
            // CURRENT YEAR
            break;
        case "5":
            // LAST YEAR
            break;
        default:
            break;
    }



    var _db = new Project.Models.UserContext();
    IQueryable<User> query = _db.User.GetUser;

    query = query.Where(p => p.User.RegisterDate <= StarPeriode ||        p.User.RegisterDate>DateTime.Now);
4

1 に答える 1

0

各状況で startDate 変数と endDate 変数を設定し、LINQステートメントで同じ where 句を使用するだけです

var startDate = DateTime.Today;
var endDate = DateTime.Today;
var now = DateTime.Today;

switch (option.ToUpper())
{
    case "0":
        // CURRENT 15 days
        startDate = now.AddDays(-15);
        endDate = now;
        break;
    case "1":
        // LAST 30 days
        startDate = now.AddDays(-30);
        endDate = now;
        break;
    case "2":
        // CURRENT MONTH
        startDate = new DateTime(now.Year, now.Month, 1);
        endDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month));
        break;
    case "3":
        // LAST MONTH
        var lastMonth = now.AddMonths(-1);
        startDate = new DateTime(lastMonth.Year, lastMonth.Month, 1);
        endDate = new DateTime(lastMonth.Year, lastMonth.Month, DateTime.DaysInMonth(lastMonth.Year, lastMonth.Month));
        break;
    case "4":
        // CURRENT YEAR
        startDate = new DateTime(now.Year, 1, 1);
        endDate = new  DateTime(now.Year, 12, 31);
        break;
    case "5":
        // LAST YEAR
        var lastYear = now.AddYears(-1);
        startDate = new DateTime(lastYear.Year, 1, 1);
        endDate = new  DateTime(lastYear.Year, 12, 31);
        break;
    default:
        break;
}

var users = Users.Where(u => u.RegisterDate >= startDate && u.RegisterDate <= endDate);

RegisterDate 値を保存する方法に応じて、私の例ではすべての時間部分が午前 12:00:00 であると想定しているため、エッジ ケースを監視する必要があります。

于 2013-02-26T22:52:00.210 に答える