Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从LINQ实体中的日期时间获取可排序字符串的正确方法是什么? //员工服务: [网络方法] 公开名单 { 返回 ( 从p开始,以db.Persons为单位 其中p.Type=='E' 选择新员工 { Name=p.FullName, //HireDate=p.CreationDate.ToString(), //工作,但不是我需要的格式 //HireDate=p.CreationDate.ToString(“s”), //抛出NotSupportedException //HireDate=包装物(p.CreationDate), //工作,但让我担心性能 //内心感到死亡 } ).ToList(); } 私有字符串包装器(日期时间日期) { 返回日期。ToString(“s”); } //其他地方: 公营雇员 { 公共字符串名称; 公共字符串租用; }_C#_Linq_Linq To Sql_Linq To Entities - Fatal编程技术网

C# 从LINQ实体中的日期时间获取可排序字符串的正确方法是什么? //员工服务: [网络方法] 公开名单 { 返回 ( 从p开始,以db.Persons为单位 其中p.Type=='E' 选择新员工 { Name=p.FullName, //HireDate=p.CreationDate.ToString(), //工作,但不是我需要的格式 //HireDate=p.CreationDate.ToString(“s”), //抛出NotSupportedException //HireDate=包装物(p.CreationDate), //工作,但让我担心性能 //内心感到死亡 } ).ToList(); } 私有字符串包装器(日期时间日期) { 返回日期。ToString(“s”); } //其他地方: 公营雇员 { 公共字符串名称; 公共字符串租用; }

C# 从LINQ实体中的日期时间获取可排序字符串的正确方法是什么? //员工服务: [网络方法] 公开名单 { 返回 ( 从p开始,以db.Persons为单位 其中p.Type=='E' 选择新员工 { Name=p.FullName, //HireDate=p.CreationDate.ToString(), //工作,但不是我需要的格式 //HireDate=p.CreationDate.ToString(“s”), //抛出NotSupportedException //HireDate=包装物(p.CreationDate), //工作,但让我担心性能 //内心感到死亡 } ).ToList(); } 私有字符串包装器(日期时间日期) { 返回日期。ToString(“s”); } //其他地方: 公营雇员 { 公共字符串名称; 公共字符串租用; },c#,linq,linq-to-sql,linq-to-entities,C#,Linq,Linq To Sql,Linq To Entities,我使用的JavaScript框架需要ISO 8601样式格式的日期,这正是调用DateTime对象上的.ToString(“s”)将返回的结果 在LINQ to SQL中是否有更干净/更有效的方法来实现这一点?我相信在这种情况下,包装器技巧是最好的。对不起 更新:这里似乎又有人问这个问题:。答案也差不多是“对不起”;考虑到是谁参与了这个问题,我现在真的确信你做得再好不过了。问题是,当使用IQueryable时,提供者试图将所有LINQ表达式翻译成它可以发送到数据库的内容。它无法知道如何处理ToS

我使用的JavaScript框架需要ISO 8601样式格式的日期,这正是调用
DateTime
对象上的
.ToString(“s”)
将返回的结果


在LINQ to SQL中是否有更干净/更有效的方法来实现这一点?

我相信在这种情况下,
包装器
技巧是最好的。对不起


更新:这里似乎又有人问这个问题:。答案也差不多是“对不起”;考虑到是谁参与了这个问题,我现在真的确信你做得再好不过了。

问题是,当使用
IQueryable
时,提供者试图将所有LINQ表达式翻译成它可以发送到数据库的内容。它无法知道如何处理
ToString(“s”)
,因此会抛出
NotSupported
异常


如果要在
选择调用之前添加
.AsEnumerable()
,那么它应该可以工作。不同之处在于
Person
对象将被完全带到内存中,然后运行投影(Select)方法,所有这些都将作为.NET编译方法而不是SQL来完成。因此,基本上
AsEnumerable()
之后的任何操作都将在内存中执行,而不是在数据库中执行,因此通常不建议在尽可能减少行数之前执行(即,毕竟
Where
OrderBy
s).

My$0.02:没有规则规定必须在同一个对象上显示和排序。这是你不应该做的事情之一。返回日期时间。JavaScriptSerializer以专有格式处理这些。在JS中反序列化为JS日期。你的分类会有用的。@Craig Stuntz:同意,尽管分类不是我真正的问题;这更多的是ExtJS处理(特别是解析)iso8601的问题,它比.NET的专有格式更清晰.ToString(“s”)
和Save上的
TryParse()
减少了麻烦(在我的特殊情况下)在返回的JSON上有一个反序列化过滤器,它查找MS格式并在反序列化期间用<代码>日期>代码替换它。@ Craig Stuntz:您可以考虑在某处发布反序列化过滤器;我想看看。这会让你大致了解:
// EmployeeService:
[WebMethod]
public List<Employee> GetEmployees()
{
    return
        (
            from p in db.Persons
            where p.Type == 'E'
            select new Employee
            {
                Name = p.FullName,
                //HireDate = p.CreationDate.ToString(), 
                // works, but not in the format I need

                //HireDate = p.CreationDate.ToString("s"), 
                // throws a NotSupportedException

                //HireDate = Wrapper(p.CreationDate), 
                // works, but makes me worry about performance 
                // and feel dead inside
            }
        ).ToList<Employee>();
}

private String Wrapper(DateTime date)
{
    return date.ToString("s");
}

// Elsewhere:
public class Employee
{
    public String Name;
    public String HireDate;
}