我的Sql查询是:
select count(*),CONVERT(varchar, AddedOn, 101)
from MemberNotifications where IsActive=1
group by CONVERT(varchar, AddedOn, 101)
order by CONVERT(varchar, AddedOn, 101) desc
但是我无法在以下尝试中获得结果
List<NotificationCounts> lst =
(from mn in this.MemberNotifications
where mn.UId.Equals(friendId)
select new NotificationCounts{ NotificationDate = mn.AddedOn.ToString("mm/dd/yyyy") })
.ToList<NotificationCounts>();
我想只获取mat的字符串日期列表,但是它给出了一个例外
LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,此方法无法翻译 进入商店表达。
这个错误有什么解决方案吗?
答案 0 :(得分:0)
true ... linq无法将.ToString转换为SQL指令...需要获取mn.AddedOn的普通值并在数据库获取后对其进行转换。希望它有所帮助
答案 1 :(得分:0)
你不能在那里调用ToString(),因为没有SQL的翻译。
您必须先调用ToList()
,之后您可以按照自己的意愿操作内存对象:
List<NotificationCounts> lst =
(from mn in this.MemberNotifications
where mn.UId.Equals(friendId)
select
new {
NotificationDate = mn.AddedOn
})
.ToList()
.Select(n => new NotificationCounts
{
NotificationDate = n.NotificationDate.ToString("mm/dd/yyyy")
});
编辑:对于按日期分组,请参阅此问题:LINQ to Entities group-by failure using .date 简而言之:使用EntityFunctions.TruncateTime Method
答案 2 :(得分:0)
只需将字符串保存到临时变量,然后在表达式中使用它:
样品:
var strItem = item.Key.ToString();
IQueryable<entity> pages = from p in context.pages
where p.Serial == strItem
select p;
问题是ToString()没有真正执行,它被转换为MethodGroup然后解析并转换为SQL。由于没有ToString()等效,表达式失败。 查看此link了解更多信息
答案 3 :(得分:0)
使用此(未测试)
List<NotificationCounts> lst = (from mn in this.MemberNotifications
where mn.UId.Equals(friendId) select mn).ToList()
.Select(mn=>new NotificationCounts
{
NotificationDate = mn.AddedOn.ToString("mm/dd/yyyy")
}).ToList();