将 datetimes 日期列表导出为字符串

export a list of datetimes date as string

提问人:selda kabirnejat 提问时间:7/6/2023 最后编辑:mark_bselda kabirnejat 更新时间:7/7/2023 访问量:52

问:

我想将包含datimes日期部分的列表导出为字符串,但出现了以下错误: System.NotSupportedException:“LINQ to Entities 无法识别方法 'System.String ToShortDateString()' 方法,并且此方法无法转换为存储表达式。

代码是:

public List<string> ReadDatesDAL(string d)
{
    var q = db.visits.Include("Doctor")
        .Where(i => i.delstatus == false)
        .Where(i => i.doctor.name == d)
        .Select(i => i.start.ToShortDateString());
    return q.ToList();
}
C# Visual Studio 日期时间 格式

评论

0赞 Panagiotis Kanavos 7/6/2023
SQL 中没有,也没有有意义的翻译,因为实际格式取决于最终用户的区域设置。您需要先加载日期,然后将它们格式化为所需格式的字符串ToShortDateString
0赞 Panagiotis Kanavos 7/6/2023
在此查询中不需要。 不是 JOIN,它告诉 EF 急切地加载相关对象以及根对象。您可以在没有它的情况下使用。IncludeInclude.Where(i => i.doctor.name == d)
0赞 wenbingeng-MSFT 7/19/2023
实体框架不支持 ToShortDateString() 方法,该方法将转换为 SQL 以在数据库服务器上执行。因此,不能直接在 LINQ 查询中使用此方法。

答:

1赞 phuzi 7/6/2023 #1

该错误指出“无法转换为存储表达式”。更改 ,使其仅返回 。然后,可以调用以运行查询,然后再调用。ToShortString()Selecti.startToList()ToShortString()

public List<string> ReadDatesDAL(string d)
{
    var q = db.visits.Include("Doctor")
        .Where(i => i.delstatus == false)
        .Where(i => i.doctor.name == d)
        .Select(i => i.start);

    return q.ToList().Select(i => i.ToShortDateString()).ToList();
}

评论

0赞 selda kabirnejat 7/6/2023
错误 egain:无法隐式将类型“type1”转换为“type2”。存在显式转换(是否缺少强制转换?
0赞 Panagiotis Kanavos 7/6/2023
@seldakabirnejat 和 是什么?此答案解决了您提出的问题。我们无法知道其他字段的类型是什么,以及它们导致错误的原因。在问题本身中发布您尝试的代码和完整的异常文本type1type2
0赞 phuzi 7/6/2023
这听起来像是一个不同的问题。我假设您在错误中替换了“type1”和“type2”。不知道这些类型是什么以及它们在哪里使用意味着,不可能提供进一步的帮助。我假设代码的其余部分有效,并按所述回答了问题。