C#.Net Linq并将datetime转换为格式化的sting

时间:2018-03-12 14:51:31

标签: c# .net linq

我有查询

var result =  (from myView in db.loginSessions
    where myView.machine.ToUpper().Equals(machine.ToUpper())
          && myView.start >= myStart
          && myView.end <= myEnd
    orderby myView.start
    select new loginSessionList {
        Id = myView.id,
        Machine = myView.machine.ToUpper(),
        Start = myView.start.ToString("u"),
        End = myView.end.ToString("u"),
        User = myView.username
    }).ToList();

我在日期时间转换中获得ArgumentOutOfRange个例外。我尝试了不同的ToString转换字符串。我尝试过Intellisence提供的其他To... date-&gt;字符串转换。我试过了Convert.string(myView.start)。没有任何效果。我用谷歌搜索,并使用我尝试过的所有东西找到了建议。我是否必须对生成的列表进行后期处理?

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我有3条处理DateTimes的规则很好地为我服务:

  1. 始终存储,检索并传输UTC值。转换到适当的本地时区是ToString()的工作,它向Windows询问用户时区。 You do not want to add timezones to your troubles
  2. 避免将DateTimes存储,检索或传输为字符串。尽可能保持适当的类型
  3. 如果您不能遵循规则2(就像处理Serialsiation时那样),至少在所有端点上选择固定的文化格式和字符串编码。您不希望为现有的麻烦获得不同的文化或错误的暗示编码

答案 1 :(得分:0)

所以,我的问题的答案与Linq或.Net无关。 @JoeEnos让我走上了正确的轨道,正如我在评论中提到的那样。我创建了一个类来接收每一行查询结果。日期字段最初是DateTime类型,但我开始遇到问题。我将这些字段更改为字符串,然后最后问我上面的问题。

当接收类仍具有DateTime字段时,所有字段都具有小写名称。我必须应用CamelCased字段名称的某种代码格式。这意味着在序列化结果后,无法找到CamelCased名称且javascript不关心。

我在js代码中修改了字段名称,将字段数据类型更改回DateTime,一切都很好。

由于