【问题标题】:using ToString() in linq expression to convert DateTime value在 linq 表达式中使用 ToString() 来转换 DateTime 值
【发布时间】:2015-01-20 19:54:40
【问题描述】:

我正在尝试将 DateTime 值转换为字符串,但出现此运行时错误:

附加信息:LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且此方法不能 翻译成商店表达式。

这是我正在使用的查询:

using (var db = new DbContext())
{
    var results = (from u in db.AspNetUserses
        join upi in db.UserPersonalInfoes on u.Id equals upi.UserId into upis
        from upi in upis.DefaultIfEmpty()
        join up in db.UserPreferenceses on u.Id equals up.UserId into ups
        from up in ups.DefaultIfEmpty()
                   join us in db.UserStatses on u.Id equals us.UserId into uss
                   from us in uss.DefaultIfEmpty()
        select new
        {
            Username = u.UserName,
            Telephone = (upi == null ? String.Empty : upi.Telephone),
            ID = u.Id,
            LastLogin = (us == null ? String.Empty : us.LastLoginDate) 
        }).ToList();

    gvUsers.DataSource = results;
    gvUsers.DataBind();

}

知道如何解决这个错误吗?

【问题讨论】:

  • 嗯,您在该代码的哪个位置将DateTime 转换为string?你的意思是写us.LastLoginDate.ToString()
  • 是的,我试过了,对不起

标签: c# linq datetime linq-to-sql linq-to-entities


【解决方案1】:

创建第二个列表并在那里进行转换。

using (var db = new DbContext())
{
    var results = (from u in db.AspNetUserses
        join upi in db.UserPersonalInfoes on u.Id equals upi.UserId into upis
        from upi in upis.DefaultIfEmpty()
        join up in db.UserPreferenceses on u.Id equals up.UserId into ups
        from up in ups.DefaultIfEmpty()
               join us in db.UserStatses on u.Id equals us.UserId into uss
               from us in uss.DefaultIfEmpty()
        select new
        {
            Username = u.UserName,
            Telephone = (upi == null ? String.Empty : upi.Telephone),
            ID = u.Id,
            LastLogin = (us == null ? DateTime.MinValue : us.LastLoginDate) 
        }).ToList();

       var list = (from r in results
                   select new {
                     Username = r.UserName,
                     Telephone = r.Telephone,
                     ID = r.ID
                     LastLogin = r.LastLogin == DateTime.MinValue ? "" : r.LastLogin.ToString()
                    }).ToList();


      gvUsers.DataSource = list;
      gvUsers.DataBind();
}

【讨论】:

  • 是的.... LINQ 很难像这样转换查询中的内容。您也可以在第一次调用 ToList() 之后立即 Select(x => new {...},或使用 SqlFunctions.DateName,如下所示:LINQ Date conversion
猜你喜欢
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多