1

我的 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)”方法,并且该方法无法转换为存储表达式。

这个错误有什么解决办法吗?

4

4 回答 4

0

是的... linq无法将.ToString转换为SQL指令...需要获取mn.AddedOn的纯值并在数据库获取后对其进行转换。希望能帮助到你

于 2013-05-15T07:47:26.630 回答
0

只需将字符串保存到临时变量,然后在表达式中使用它:

样本:

var strItem = item.Key.ToString();
IQueryable<entity> pages = from p in context.pages
                           where  p.Serial == strItem
                           select p;

问题是 ToString() 并没有真正执行,它变成了 MethodGroup,然后被解析并转换为 SQL。由于没有 ToString() 等效项,因此表达式失败。检查此链接以获取更多信息

于 2013-05-15T07:53:16.070 回答
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 方法

于 2013-05-15T07:51:14.900 回答
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();
于 2013-05-15T07:57:20.877 回答