Почему не работает Take () в этом запросе Linq to Sql - PullRequest
1 голос
/ 08 марта 2011

Я хочу взять первые 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 голосов
/ 08 марта 2011

Я думаю, у вас там слишком много д =. Попробуйте это

   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);

Кроме того, если вы не возражаете против некоторой конструктивной критики, я не думаю, что ваш веб-метод должен сопоставлять эти два возвращаемых результата. Возможно, есть отдельный веб-метод для каждого - более строгий тип. Проверка вкладки должна выполняться на стороне клиента, и должен быть вызван соответствующий веб-метод. Просто мысль. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...