需求如下,DataTable为查出学生表成绩,按成绩排序取出前5条,网上看了些例子,用到Take(5),但只能用在IList<T>里。我的写法是
var query = from t in dt.AsEnumerable()
                        orderby t.Field<Int32>("score")
                        select t;
接着怎么去前5条呢?

解决方案 »

  1.   

    var query = (from t in dt.AsEnumerable()
                            orderby t.Field<Int32>("score")
                            select t).Take(5);
    只要继承IEnumerable都可以Take
      

  2.   

         var query = (from t in dt.AsEnumerable()
                        orderby t.Field<Int32>("score")
                        select t).Take(5);
      

  3.   

               var q = (from t in dt.AsEnumerable()
                        orderby t.Field<Int32>("score")
                        select t).Take(5);
                //取5到10
                var d=q.Take(10).Skip(5);
      

  4.   

    但是我编译都没通过,报错是:错误 7 “System.Data.OrderedEnumerableRowCollection<System.Data.DataRow>”不包含“Take”的定义,并且找不到可接受类型为“System.Data.OrderedEnumerableRowCollection<System.Data.DataRow>”的第一个参数的扩展方法“Take”(是否缺少 using 指令或程序集引用?)
      

  5.   

    你贴代码,我用take一点问题没有啊。
      

  6.   

    var query = (from t in dt.AsEnumerable()
                            where t.Field<string>("isindoor")=="室外"
                            orderby t.Field<decimal>("utility_rate")
                            select t).Take(5);