【问题标题】:Return only date from SQL Server CE datetime using linq-to-entities使用 linq-to-entities 仅从 SQL Server CE 日期时间返回日期
【发布时间】:2013-09-27 00:05:33
【问题描述】:

有没有办法让 linq 查询只返回日期时间的日期部分。我已经尝试了所有我能找到的建议,所有这些建议都会在运行时产生错误。这只是查询的选择部分以及每个错误消息(查询的其余部分效果很好):

select new { d.id, d.date.Value.Date }; 

LINQ to Entities 不支持指定的类型成员“日期”。仅支持初始化程序、实体成员和实体导航属性。

select new { d.id, date=EntityFunctions.TruncateTime(d.date) }; 

SQL Server Compact 无法识别该函数。 [ 函数名称 = TRUNCATETIME,数据类型(如果已知) = ]

select new { d.id, date=d.date.Value.Month + "/" + d.date.Value.Day };

无法将类型“System.Int32”转换为类型“System.Object”。 LINQ to Entities 仅支持转换实体数据模型基元类型。

select new { d.id, date=d.date.Value.Month.ToString() + "/" + d.date.Value.Day.ToString() };

LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式。

select new { d.id, date=String.Concat(d.date.Value.Month, "/")};

LINQ to Entities 无法识别方法 'System.String Concat(System.Object, System.Object)' 方法,并且此方法无法转换为存储表达式。

感谢您的帮助!

【问题讨论】:

    标签: linq-to-entities


    【解决方案1】:
    select new {
        d.id,
        date = SqlFunctions.DatePart("m", d.date) + "/" + SqlFunctions.DatePart("d", d.date)
    }; 
    

    它会给你一个带有month/day 模式的字符串。

    但我会选择以下内容:

    (from r in row
    ...
    select new { d.id, date = d.date.Value })
    .AsEnumerable()
    .Select(x => new { x.id, x.date.Date }); 
    

    它将从 db 中选择整个日期时间,并将仅日期选择移动到 LINQ 到对象查询中。

    【讨论】:

    • SqlFunctions.DatePart():此函数只能从 LINQ to Entities 调用。第二个返回日期和时间,所有时间都设置为 12:00:x.date.Value.Date
    • 这行得通!谢谢一百万 MarcunJuraszek!!.Select(x => new { x.id, date = x.date.Value.ToShortDateString() });
    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多