无法将类型'System.Linq.IQueryable'隐式转换为'System.Linq.IOrderedEnumerable

时间:2013-05-12 10:54:11

标签: asp.net-mvc linq

我正在努力与linq争夺日期时间。

如果记录小于当前日期,我正在尝试获取信息

以下是代码:

public ActionResult _Events()
{
          DateTime dt = DateTime.Now.Date;
          var   DocsFirst =(from t in db.tble_presentation
                            where dt >=  EntityFunctions.TruncateTime(t.presentation_date)
                             select t).OrderByDescending(t => t.presentation_date).Take(2);

            return PartialView(new Newsmodel
            {
               DocsList_list1 = DocsFirst,
            });
}

但我收到以下错误

  

无法将类型'System.Linq.IQueryable'隐式转换为   'System.Linq.IOrderedEnumerable'。存在显式转换   (你错过了演员吗?)

提前谢谢 碎甲弹

1 个答案:

答案 0 :(得分:1)

看起来DocsList_List1的类型为IOrderedEnumerable(正如@Emre在评论中指出的那样)。要使代码编译,您必须将DocsList_list1的声明更改为兼容类型(可能是IEnumerable)或将linq查询的结果更改为IOrderedEnumerable。一种(有点难看)做后者的方法:

var DocsFirst = (from t in db.tble_presentation
                 where dt >=  EntityFunctions.TruncateTime(t.presentation_date)
                 select t).Take(2).AsEnumerable()
                 .OrderByDescending(t => t.presentation_date);

它有些难看,因为它在内存中执行排序而不是让数据库执行此操作,但由于Take(2)放在AsEnumerable()之前,它仍然只读取了两个请求的元素。