c# - 下拉日期范围列表以过滤相关数据

时间:2017-04-22 19:50:34

标签: c# asp.net asp.net-mvc linq asp.net-mvc-5

我必须创建一个下拉菜单,允许用户选择日期范围,并根据他们的选择,显示范围之间的日期的所有记录。

我知道如何查询一个范围(下面的代码片段),但是如何查询下拉菜单只填充“过去7天”,“过去15天”,“过去30天”的选项, “过去60天”和“所有交易”(然后根据选择显示相应的交易)?

也很高兴知道如何使用一个名为“自定义”的选项,允许用户输入自己的日期范围,但这不是优先事项。

我在下面的内容将在过去七天内查询和显示交易,但这显然无法实现我想要的目标。

public SelectList GetDateRanges()
    {
        DateTime today = DateTime.Today;
        DateTime minusSeven = today.AddDays(-7);
        DateTime minusFifteen = today.AddDays(-15);
        DateTime minusThirty = today.AddDays(-30);
        DateTime minusSixty = today.AddDays(-60);

        var query = from t in db.Transactions
                    where t.TransactionDate >= minusSeven
                    select t;

我的想法是我可能会创建一个静态列表,但后来我不知道如何根据用户在该列表中的选择进行查询。

1 个答案:

答案 0 :(得分:0)

将句点传递回您的功能

public SelectList GetDateRanges(int daysBack)
{
    var oldestDate = (DateTime.Today).AddDays(daysBack * -1);

    var query = from t in db.Transactions
                where t.TransactionDate >= oldestDate
                select t;
    ...
}

并在select控件中预设daysBack值。

<select name="daysBack">
    <option value="7">Last 7 days</option>
    <option value="15">Last 15 days</option>
</select>

如果您最终想要给予用户完全控制权,那么请传递两个日期边界。每个其他选项只是此查询的一个子集。

public SelectList GetDateRanges(DateTime startDate, DateTime endDate)
{
    var query = from t in db.Transactions
                where t.TransactionDate >= startDate &&
                      t.TransactionDate <= endDate
                select t;
    ...
}

然后,您可以使用客户端插件来完成提供两个日期的工作。