在转换日期时将sql查询转换为linq获取错误

时间:2013-05-15 07:39:09

标签: c# asp.net sql linq

我的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 个答案:

答案 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();