Asp.net mvc LINQ将日期时间转换为字符串 列表= ( 从c到db.TitleComments 在db中加入t。c.TitleId上的标题等于t.Id 在数据库中加入u。c.UserId上的用户等于u.Id 其中t.Id==\u titleId&&c.Date>time orderby c.日期递减 选择new Post{Username=u.Username,PostingDate=c.Date.ToString(),Data=c.Comment} ).ToList();

Asp.net mvc LINQ将日期时间转换为字符串 列表= ( 从c到db.TitleComments 在db中加入t。c.TitleId上的标题等于t.Id 在数据库中加入u。c.UserId上的用户等于u.Id 其中t.Id==\u titleId&&c.Date>time orderby c.日期递减 选择new Post{Username=u.Username,PostingDate=c.Date.ToString(),Data=c.Comment} ).ToList();,asp.net-mvc,linq,entity-framework,entity,Asp.net Mvc,Linq,Entity Framework,Entity,上面的代码导致将日期转换为字符串时出现异常,PostingDate=c.date.ToString()。有什么办法可以解决这个问题吗 异常错误: {“LINQ to Entities无法识别方法'System.String ToString()'方法,此方法无法转换为存储表达式。”}您可以通过投影到匿名类型来解决问题,然后在以后的步骤中,在数据已从数据库返回后投影到Post List<Post> list = ( from c in db.TitleComments

上面的代码导致将日期转换为字符串时出现异常,PostingDate=c.date.ToString()。有什么办法可以解决这个问题吗

异常错误:
{“LINQ to Entities无法识别方法'System.String ToString()'方法,此方法无法转换为存储表达式。”}

您可以通过投影到匿名类型来解决问题,然后在以后的步骤中,在数据已从数据库返回后投影到
Post

List<Post> list =
(
    from c in db.TitleComments
    join t in db.Titles on c.TitleId equals t.Id
    join u in db.Users on c.UserId equals u.Id
    where t.Id == _titleId && c.Date > time
    orderby c.Date descending
    select new Post { Username = u.Username, PostingDate = c.Date.ToString(), Data = c.Comment }
).ToList();

但是,考虑到您有一个名为PostingDate的属性,原始源是日期,我建议您修改对象,将值保留为
DateTime
,而不是字符串。

我认为这不能直接实现

(from ....
 select new { /* stuff */, Date = c.Date })
.AsEnumerable()
.Select(p => new Post { /* stuff */, PostingDate = p.Date.ToString() })
.ToList();
使用EF4,您还可以尝试以下方法:

   var list =    
    select new Post { Username = u.Username, PostingDate =  SqlFunctions.StringConvert(c.Date), Data = c.Comment } 
from 
(from c in db.TitleComments
    join t in db.Titles on c.TitleId equals t.Id
    join u in db.Users on c.UserId equals u.Id
    where t.Id == _titleId && c.Date > time
    orderby c.Date descending).AsEnumerable()  
    ).ToList();
列表=
(
从c到db.TitleComments
在db中加入t。c.TitleId上的标题等于t.Id
在数据库中加入u。c.UserId上的用户等于u.Id
其中t.Id==\u titleId&&c.Date>time
orderby c.日期递减
选择newpost{Username=u.Username,PostingDate=SqlFunctions.DateName(c.Date),Data=c.Comment}
).ToList();
linq正在尝试使用sql将日期转换为字符串,但由于sql中没有ToString()方法,因此无法转换,此行为是出于设计考虑-Joakim

换句话说,返回日期本身,并在SQL端执行后将其转换为字符串:

List<Post> list =
(
from c in db.TitleComments
join t in db.Titles on c.TitleId equals t.Id
join u in db.Users on c.UserId equals u.Id
where t.Id == _titleId && c.Date > time
orderby c.Date descending
select new Post { Username = u.Username, PostingDate = SqlFunctions.DateName(c.Date), Data = c.Comment }
).ToList();

@BrunoLM,linq正在尝试使用sql将日期转换为字符串,但由于sql中没有ToString()方法,因此无法转换,我相信这种行为是经过设计的。您能给出确切的例外情况吗。我不相信这是SQL中抛出的错误。Sry我以为这是一个休眠问题,我的错..是的。这正是@Joakim所说的。我觉得这就是我要做的,将PostingDate设置为DateTime类型。我想让客户端不必执行日期格式化,但在这种情况下似乎无能为力。
(
select new { Username = u.Username,
    PostingDate = c.Date
    [...]
})
.ToList() // runs on SQL and returns to the application
.Select(o =>  // is not generating a SQL, it is running on the app
    new Post { Username = o.Username,
        PostingDate = o.PostingDate.ToString(),
        [...]
    })