在linq表达式中使用ToString()来转换DateTime值

时间:2015-01-20 19:54:41

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

我试图将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();

}

知道如何修复此错误?

1 个答案:

答案 0 :(得分: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();
}