LINQ不同的项目按日期部分仅来自Select子句中的DateTime字段

时间:2017-07-27 14:18:01

标签: c# entity-framework linq

我正努力让语法更正确。

我试图通过date获取一个明确的optionNames列表,而不是日期时间。以下LINQ查询仅按日期时间获取不同的列表

var optionList = await db.OptionsStore.Select(x => new { x.OptionTime, x.OptionName })
.Distinct().ToListAsync();

x.OptionTime是DateTime类型。我知道如何仅在where子句中使用日期部分而不是select子句。将x.OptionTime更改为x.OptionTime.Date会出现此错误:

  

System.NotSupportedException:'指定的类型成员'日期'不是   LINQ to Entities支持。只有初始化者,实体成员和   支持实体导航属性

是否可以在查询中将日期时间转换为日期,或者我之后是否需要处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

使用EntityFunctions.TruncateTime()DateTime.Date无法转换为SQL):

var optionList = await db.OptionsStore
                         .Select(x => new 
                          { 
                              OptionTime = EntityFunctions.TruncateTime(x.OptionTime), 
                              OptionName = x.OptionName 
                          })
                         .Distinct()
                         .ToListAsync();

答案 1 :(得分:1)

您应该尝试使用System.Data.Entity.DbFunctions TruncateTime函数。