C# Linq搜索日期

C# Linq搜索日期,c#,linq,C#,Linq,如何在使用Linq进行搜索时使用date。我想我在申报单上遗漏了什么 string searchName = Request.Form["PersonName"]; DateTime searchDateFrom = Request.Form["ReceivedDateFrom"]; DateTime searchDateTo = Request.Form["ReceivedDateTo"]; var Results = (from va in _db.myTable where

如何在使用Linq进行搜索时使用date。我想我在申报单上遗漏了什么

string searchName = Request.Form["PersonName"];
DateTime searchDateFrom = Request.Form["ReceivedDateFrom"];
DateTime searchDateTo = Request.Form["ReceivedDateTo"];

var Results = (from va in _db.myTable
       where ((va.PersonName.Contains(searchName)
               && (va.ApplicationReceivedDate > searchDateFrom 
                   && va.ApplicationReceivedDate < searchDateTo)
               select va).ToList();
string searchName=Request.Form[“PersonName”];
DateTime searchDateFrom=Request.Form[“ReceivedDateFrom”];
DateTime searchDateTo=Request.Form[“ReceivedDateTo”];
var结果=(来自_db.myTable中的va)
其中((va.PersonName.Contains)(searchName)
&&(va.ApplicationReceivedDate>searchDateFrom)
&&va.ApplicationReceivedDate
可能是一个输入错误,但您需要将searchDateFrom/searchDateTo转换为DateTime,并且在linq语句中有两个额外的开括号

这是我设置单元测试以查看发生了什么的时候

检查括号和从字符串到日期时间的转换:

[TestMethod]
    public void TestMethod1()
    {
        List<myTable> myTables = new List<myTable>();
        for (int month = 1; month < 10; month++)
        {
            for (int day = 1; day < 20; day++)
            {
                myTables.Add(new myTable { PersonName = "Person " + month.ToString() + " " + day.ToString(), ApplicationReceivedDate = new DateTime(2011, month, day) });
            }
        }

        string searchName = "Person";
        DateTime searchDateFrom = Convert.ToDateTime("2011-01-02");
        DateTime searchDateTo = Convert.ToDateTime("2011-01-03");

        var Results = (from va in myTables
                       where va.PersonName.Contains(searchName)
                               && va.ApplicationReceivedDate >= searchDateFrom
                                   && va.ApplicationReceivedDate < searchDateTo
                       select va);

        Assert.AreEqual(Results.Count(), 1);
    }

    public class myTable
    {
        public string PersonName { get; set; }
        public DateTime ApplicationReceivedDate { get; set; }
    }
[TestMethod]
公共void TestMethod1()
{
List myTables=新列表();
对于(整数月=1;月<10;月++)
{
对于(整数天=1;天<20;天++)
{
添加(新的myTable{PersonName=“Person”+month.ToString()+“”+day.ToString(),ApplicationReceivedDate=new DateTime(2011,month,day)});
}
}
字符串searchName=“Person”;
DateTime searchDateFrom=Convert.ToDateTime(“2011-01-02”);
DateTime searchDateTo=Convert.ToDateTime(“2011-01-03”);
var结果=(来自myTables中的va)
其中va.PersonName.Contains(searchName)
&&va.ApplicationReceivedDate>=searchDateFrom
&&va.ApplicationReceivedDate

还要检查从&到的搜索。

我还建议使用更干净的缩进,这样更容易跟随和计算括号和其他内容

string searchName = Request.Form["PersonName"];
DateTime searchDateFrom = Request.Form["ReceivedDateFrom"];
DateTime searchDateTo = Request.Form["ReceivedDateTo"];

var Results = (from va in _db.myTable
              where va.PersonName.Contains(searchName)
              && (va.ApplicationReceivedDate > searchDateFrom 
              && va.ApplicationReceivedDate < searchDateTo)
              select va).ToList();
string searchName=Request.Form[“PersonName”];
DateTime searchDateFrom=Request.Form[“ReceivedDateFrom”];
DateTime searchDateTo=Request.Form[“ReceivedDateTo”];
var结果=(来自_db.myTable中的va)
其中va.PersonName.Contains(searchName)
&&(va.ApplicationReceivedDate>searchDateFrom)
&&va.ApplicationReceivedDate
是一个,您可以通过int/string indexer在其中获取字符串。也就是说,
Request.Form[“ReceivedDateFrom”]
返回字符串,如果不进行任何转换,则无法将其分配给类型为
DateTime
的变量。可以尝试使用方法将字符串转换为
DateTime
。但如果无法保证字符串的格式正确,则可以使用方法