Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试比较日期时LINQ引发异常_C#_Linq_Datetime - Fatal编程技术网

C# 尝试比较日期时LINQ引发异常

C# 尝试比较日期时LINQ引发异常,c#,linq,datetime,C#,Linq,Datetime,我有以下资料: return db.Events .Where(e => e.BedId == bed && e.Date.Year == date.Year && e.Date.Month == date.Month && e.Date.Day == date.Day)

我有以下资料:

return db.Events
            .Where(e => 
                e.BedId == bed 
                && e.Date.Year == date.Year 
                && e.Date.Month == date.Month
                && e.Date.Day == date.Day)
            .Select(x => new EventViewModel() { 
                Id          = x.Id,
                Date        = x.Date.Date.ToString(),
                StartTime   = x.StartTime.ToString(),
                EndTime     = x.EndTime.ToString(),
                Planned     = x.Planned,
                EngineSN    = x.EngineSN,
                Details     = x.Details,
                Bed         = x.Bed.Name,
                Category    = x.Subcategory.Category.Name,
                Subcategory = x.Subcategory.Name,
                Project     = x.Project.Name,
                Type        = x.Type.ToString()
            })
            .ToList();
它抱怨LINQ不支持成员“date”

我知道LINQ不能处理日期,因为它不知道如何读取和比较日期。这就是为什么我特别要求它比较年、月、日属性都是整数。在我的查询中,是什么引发了此异常


p.S.EventViewModel.Date是一个字符串

您需要更改查询,这样您就不会在DateTime上调用Date属性并更改视图模型

将定义为字符串的DateTime属性定义为DateTime。 像这样注释DateTime属性

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Date{ get; set; } 
        var startDate = date.Date;
        var endDate = date.Date.AddDays(1);

        return db.Events
        .Where(e =>
            e.BedId == bed
            && e.Date >= startDate
            && e.Date < endDate)
        .Select(x => new EventViewModel()
        {
            Id = x.Id,
            Date = x.Date,
            StartTime = x.StartTime,
            EndTime = x.EndTime,
            Planned = x.Planned,
            EngineSN = x.EngineSN,
            Details = x.Details,
            Bed = x.Bed.Name,
            Category = x.Subcategory.Category.Name,
            Subcategory = x.Subcategory.Name,
            Project = x.Project.Name,
            Type = x.Type.ToString()
        })
        .ToList();
或者您在UI中使用的任何日期格式

像这样更改您的查询

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Date{ get; set; } 
        var startDate = date.Date;
        var endDate = date.Date.AddDays(1);

        return db.Events
        .Where(e =>
            e.BedId == bed
            && e.Date >= startDate
            && e.Date < endDate)
        .Select(x => new EventViewModel()
        {
            Id = x.Id,
            Date = x.Date,
            StartTime = x.StartTime,
            EndTime = x.EndTime,
            Planned = x.Planned,
            EngineSN = x.EngineSN,
            Details = x.Details,
            Bed = x.Bed.Name,
            Category = x.Subcategory.Category.Name,
            Subcategory = x.Subcategory.Name,
            Project = x.Project.Name,
            Type = x.Type.ToString()
        })
        .ToList();

看起来您要做的是在比较和预测中排除日期的时间部分。如果是这种情况,请使用DbFunctions

.Where(DbFunctions.TruncateTime(e.Date == date))
然后

Date = DbFunctions.TruncateTime(x.Date)

LINQ使用其他人提到的日期。正是您的SELECT在x.Date.Date.ToString中抱怨

这是LINQ To Entities,这意味着您的查询最终必须转换为SQL。检查以下问题的答案:LINQ不能处理日期是什么意思?林克绝对可以。LINQ可以处理任何类型,这就是语言集成查询的全部要点。您使用的是像LINQ to SQL或LINQ to Entities这样的特定框架吗?@pymaxion抱歉,我的意思是在处理实体和SQL时。我相信,where子句中的日期不是问题,问题在您的SELECT中。可能在x.Date.Date.ToString。尝试相同的语句,但不包括SELECT part。@沙什布山您是正确的,注释出x.Date.Date.ToString有效。可能是什么问题?ToString中的方法在SQL中不可用,因此在解析过程中找不到等效的SQL部分。这是我的理解。