【问题标题】:Filter by date using lambda expression使用 lambda 表达式按日期过滤
【发布时间】:2014-08-18 17:24:22
【问题描述】:

我正在着手构建一个 ASP.NET MVC 站点,但我遇到了一个可能很简单的问题。我正在尝试使用 lambda 表达式按日期过滤查询。我尝试过滤的其他方法已经成功。这是我想要完成的。数据存储在具有date 数据类型的SQL Server 2008 R2 数据库中。我不确定这是否是结果不显示的原因。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Project.Models;

public class CreateController : Controller
{
    // GET: Create
    public ActionResult Create()
    {
        var dt = DateTime.Now.AddDays(-10);           
        var db = new Models.Entities();

        var apps = db.tableName.Where(x => x.col1 == dt);                                        
        return View(apps.OrderBy(x => x.col2));
    }
}

我的看法

@model IEnumerable<Project.Models.table1>
@{
    ViewBag.Title = "Project";
}
    @foreach (var apps in Model)
    {
        <table>
            <tr>
                <th>col z</th>
                <th>col x</th>
                <th>col y</th>
                <th>col w</th>
            </tr>

            <tr>
                <td>@apps.col1</td>
                <td>@apps.col2</td>
                <td>@apps.col3</td>
                <td>@apps.col4</td>    

            </tr> 
        </table>
    }

【问题讨论】:

  • 样本数据是什么?可能你想要的是db.tableName.Where(x =&gt; x.col1 &gt;= dt);
  • 如果你只想要日期使用 x => x.col1.Date == dt.Date
  • 很难从您输入的内容中猜出您期望的结果。你说你之前过滤成功了,但不说为什么现在不成功?固定输入的预期结果是什么?

标签: c# asp.net-mvc lambda sql-server-2008-r2


【解决方案1】:
//per lordkain:
var dt = DateTime.Now.Date.AddDays(-10); 

//per Yuliam Chandra:
db.tableName.Where(x => x.col1 >= dt);

【讨论】:

    【解决方案2】:

    在您的代码中,c# 数据类型是 DateTime,而您的数据库中的数据类型是 Date。

    您可能希望将您的代码在您的创建函数中更改为

    var dt = DateTime.Today.AddDays(-10); 
    

    现在代码只有日期,没有时间!

    【讨论】:

    • 使用DateTime.Today 并且首先不要包含时间。
    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 2021-01-04
    • 2018-06-07
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多