Linq - 从日期时间中选择日期
Posted
技术标签:
【中文标题】Linq - 从日期时间中选择日期【英文标题】:Linq - Select Date from DateTime 【发布时间】:2013-10-02 00:43:18 【问题描述】:我有一个Linq
结果,我只需要从DateTime
中选择Date
。
我的查询是这样的:
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
//CREATED_DATE = xx.CREATED_DATE.Value.Date
//CREATED_DATE = EntityFunctions.TruncateTime(xx.CREATED_DATE)
xx.CREATED_DATE
).ToList();
这可能吗? 任何帮助将不胜感激。
CREATED_DATE - `datetime` datatype
实际上,我将它作为DataSource
绑定到控件,并且控件同时显示Date and Time
。但我只想显示date
。
当我尝试使用 CREATED_DATE = xx.CREATED_DATE.Value.Date
时,它会给出如下错误:
LINQ to Entities 不支持指定的类型成员“日期”。 只有初始化器、实体成员和实体导航属性 支持。
【问题讨论】:
问题出在哪里? xx.CREATED_DATE.ToShortDateString() ? CREATED_DATE 是什么格式? 【参考方案1】:如果是出于演示目的,那么您可以使用DataFormatString
属性。例如,如果您将数据源绑定到 GridView,您可以这样做;
<asp:BoundField DataField="CREATED_DATE" ...
DataFormatString="0:d" ../>
否则,您可以使用EntityFunctions.TruncateTime(),它返回不带时间部分的输入日期。
EntityFunctions.TruncateTime(xx.CREATED_DATE)
您的查询会是这样的;
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
EntityFunctions.TruncateTime(xx.CREATED_DATE) //new like
).ToList();
【讨论】:
在较新版本的 Entity Framework 中,EntityFunctions
已替换为 DbFunctions
。
在 Entity Framework Core 中既不需要 EntityFunctions 也不需要 DbFunctions,日期字段可以很好地处理 .Date【参考方案2】:
使用这个...它对我有用..
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
CREATED_DATE=SqlFunctions.DateName("day", xx.CREATED_DATE).Trim() + "/" +
SqlFunctions.StringConvert((double)xx.CREATED_DATE.Value.Month).TrimStart() + "/" +
SqlFunctions.DateName("year", xx.CREATED_DATE)
).ToList();
输出日期为 dd/MM/yyyy 格式
【讨论】:
【参考方案3】:也许是这个?
var qry = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new xx.TEMPLATE_ID, xx.TEMPLATE_NAME, xx.xx.CREATED_DATE );
var UserTemplates = qry.AsEnumerable().Select(xx => new
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
xx.CREATED_DATE.Value.Date
).ToList();
【讨论】:
它没有像'.Date'这样的属性。它只有“.Value.Date”之类的属性,但它不起作用并给出如下错误:LINQ to Entities 不支持指定的类型成员“日期”。仅支持初始化器、实体成员和实体导航属性。 @RealSteel 如果您完全遵循它,这应该可以工作。原因是.Date
调用是在 Linq to Object 而不是 Linq to Entities 中运行的。仍然。这不是我的首选解决方案。
@Aron 这也不是我的首选解决方案。如果该值是出于显示目的而获得的,我什至根本不在乎将其设为查询中的日期。控件应该有一个用于显示值的 FormatString。
收到此错误:“LINQ to Entities 不支持指定的类型成员 'Date'。仅支持初始化程序、实体成员和实体导航属性。”【参考方案4】:
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1 select xx).AsEnumerable()
.Select( i=> new
i.TEMPLATE_ID,
i.TEMPLATE_NAME,
CREATED_DATE = i.CREATED_DATE.ToString("M/d/yyyy"),
i.CREATED_DATE
).ToList();
【讨论】:
查询正文必须以 select 子句或 group 子句结尾 @RealSteel 答案已更新【参考方案5】:试试这个,
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new Attributes
TEMPLATE_ID=xx.TEMPLATE_ID,
TEMPLATE_NAME=xx.TEMPLATE_NAME,
dateCreatd = xx.CREATED_DATE
)
.AsEnumerable()
.select(p=>new Attributes
TEMPLATE_ID =p.TEMPLATE_ID,
TEMPLATE_NAME=p.TEMPLATE_NAME,
dateString = p.dateCreatd .Value.toString("YYYY-MMM-dd")
).ToList();
public class Attributes
public string TEMPLATE_ID get; set;
public string TEMPLATE_NAME get; set
public DateTime dateCreatd get; set;
public string dateString get; set;
希望对你有用
【讨论】:
以上是关于Linq - 从日期时间中选择日期的主要内容,如果未能解决你的问题,请参考以下文章
当用户从日期选择器中选择日期时,如何在下拉列表中获取特定的星期几?
Ember JS从日期选择器中选择日期时,更改按钮组件的颜色和标题