为什么Take()不能在这个Linq to Sql查询中工作

时间:2011-03-08 17:10:12

标签: c# linq-to-sql

我想获取前10条记录,但忽略了.take(10)并返回所有行。

[WebMethod]
    public string getTopTenFeatured(int tab)
    {
        using (MyDataContext db = new MyDataContext())
        {

           IQueryable q = tab == 0? q = db.Items.Where(x => x.isFeatured == true)
               .OrderBy(x => x.title).Select(x=> x.title).Take(10): 
               q = db.Authors.Where(x=> x.isFeatured == true)
               .OrderBy(x => x.text).Select(x => x.text).Take(10);

            StringBuilder sb = new StringBuilder();

            sb.Append("<ul>");
            int i = 0;
            foreach (var n in q)
            {
                i++;
                sb.AppendFormat("<li>{0}. {1}</li>", i, n);
            }
            sb.Append("</ul>");

            return sb.ToString();    
        }
    }

修改:这里没有错,Projects而不是web sites显然必须手动重建。在浏览器中点击刷新不会像web site类型项目那样自动执行此操作。

1 个答案:

答案 0 :(得分:0)

我认为你的q ='太多了。试试这个

   IQueryable q = (tab == 0) ?     

      db.Items
         .Where(x => x.isFeatured == true)    
         .OrderBy(x => x.title)
         .Select(x=> x.title).Take(10)  

   :  db.Authors.Where(x=> x.isFeatured == true)
          .OrderBy(x => x.text)
          .Select(x => x.text).Take(10);

另外,如果你不介意一些建设性的批评,我认为你的网络方法不应该混淆这两个返回结果。也许每个都有一个单独的Web方法 - 更强类型。选项卡的检查应该在客户端完成,并且应该调用适当的Web方法。只是一个想法。 : - )