c# - Linq 无法翻译 ToShortDateString()

标签 c# linq

能否请您告诉我如何解决下面的查询。 LINQ 将我的日期格式化为写出的示例:2015 年 8 月 8 日。我需要 8/8/2015。我尝试的每一次尝试都会给我不同的错误信息。我究竟做错了什么。

var orgData = (from d in db.tbl_FormsSubmittedValues
               where d.SiteID == _siteID
               & d.FormID == _formID
               & ((d.tbl_FormsSubmitted.UserID == _userID && _viewOwnOnly) || !_viewOwnOnly)
               & ((_search != "" && d.Value.Contains(_search)) || _search == "")
               select new
               {
                   d.FormSubmissionID,
                   Value = d.ValueDate.HasValue ? d.ValueDate.Value.ToShortDateString(): d.ValueLong != null ? d.ValueLong : d.Value,
                   d.FieldID,
                   d.FormID,
                   d.SiteID,
                   d.tbl_FormsSubmitted,
                   d.tbl_FormsSubmitted.UserID,
               }).ToList();

原始行是给我写出日期而不是 mm/dd/yyyy

 Value = d.ValueDate != null ? d.ValueDate.ToString() : d.ValueLong != null ? d.ValueLong : d.Value,

问题行:

Value = d.ValueDate.HasValue ? d.ValueDate.Value.ToShortDateString(): d.ValueLong != null ? d.ValueLong : d.Value,

错误:

Could not translate expression 'd.ValueDate.Value.ToShortDateString()' into SQL and could not treat it as a local expression.

最佳答案

创建一个新的匿名对象的替代方法是创建一个新类型的对象(例如 select new Submission() { ... }),它公开一个只读属性以呈现一个简短的日期。这可能会为这样一个简单的操作增加一些开销,但它提供了一些灵 active (您可以稍后格式化更多字段)和性能(任何额外的查询或过滤操作都是针对数据库而不是在内存中执行的)。

或者,您可以将工作向下推到表示层。让负责向用户显示数据的代码处理转换或显示短日期,并保持您的数据/业务层精简并对其他解释开放。这将使您不必返回并更改查询或修改您的 POCO 以适应日期格式首选项的更改。例如,如果您有另一个人希望日期显示为 YYYY-dd-MM 怎么办?

关于c# - Linq 无法翻译 ToShortDateString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837943/

相关文章:

c# - 如何通过属性值选择多个 XML 标记作为 XElement?

c# - LINQ to XML (C#) 遍历节点以构建字符串?

c# - 收到 "you have an error in your SQL syntax"错误。这个查询出了什么问题?

c# - Kafka Confluent 库中 poll 和 consume 的区别

c# - ASP.NET MVC3 - 动态添加项目到对象数组

c# - linq error 为 hashset 定义的默认值

c# - 在可枚举的可枚举上调用 .Distinct()

c# - 如何锐化/完成/更正图像中的文本

c# - 从路径读取事件日志文件

c# - Linq确定一个值是否出现超过x次