2010-11-16 2 views
1

У меня есть большой набор данных и datagrid на моей странице asp.net. Я собираюсь сделать так, чтобы пользователь мог фильтровать исходный набор данных. Каков наилучший способ? Должен ли я использовать linq для фильтрации набора данных или продолжения использования sql или есть лучший способ использования vb.net с asp.net.SQL-фильтрация, какой метод лучше?

+0

Похоже, существуют дополнительные требования, которые вы здесь не выражаете. (Я не могу использовать пейджинг). Почему бы вам не сказать нам, что именно вы хотите сделать. –

ответ

4

Я думаю, что ответ, как ... ВСЕГДА «Это зависит от»

Вы сказали, что речь идет о «большом наборе данных».

Если это действительно большой, то вы не должны показывать его пользователю. Вы также должны учитывать, что сохранение его в IIS может снизить производительность. Вам нужна небольшая и быстрая страница. Поэтому я считаю, что нехорошо отправлять более 50 записей на страницу пользователю (всегда зависит от того, что такое запись)

Вы должны подумать о создании некоторого SQL, который позволит вам выполнять некоторые поисковые вызовы в ваших результатах и ​​только передайте их. Если вы хотите попытаться разобраться в коде, тогда вы можете получить «много» данных на вашем личном. И главная цель сервера sql - сортировать и хранить данные. Так что пусть он выполняет свою работу. Вы также должны учитывать недействительность любых данных, которые вы кэшируете, что может быть проблемой самостоятельно. Взгляните на хорошие функции LINQ, такие как Skip (30) .Take (10) ...

С другой стороны, если у вас есть то, что является статичным, то вы можете получить его, обналичив его на клиенте, или веб-сервис.

+0

с использованием IIS замедляет страницу? , и я не могу использовать подкачку, но что, если я использовал json или xml, потому что мне нужно выполнить арифметику с набором данных, например, с общей суммой – MyHeadHurts

+2

Хранение данных в памяти IIS между запросами приведет к тому, что ваше приложение не станет масштабируемым, поскольку вам может потребоваться хранить данные для более 1 пользователя одновременно. Убедитесь, что вы загрузите свое решение. И накладные расходы на запрос не так уж много. Если вы включаете текущие итоги, то это совершенно другой вопрос ... Вы спрашивали о фильтрации, которая только требует, чтобы узнать, сколько предметов пропустить;) –

1

Каков наилучший способ?

Было бы субъективно сказать, что было бы лучшим способом. Я могу сказать, что это будет плохо: выполните фильтрацию с помощью приложения, а не базы данных SQL. Поэтому, если по Linq вы имеете в виду Linq to Entities, и ваш запрос переводится в SQL-инструкции, чтобы фильтрация выполнялась базой данных, тогда все в порядке. Если вы имеете в виду Linq to Objects, то вы фильтруете в памяти, и для этого это означает, что вы загрузили весь набор данных в память BAD. Не загружайте что-либо в память, которая никогда не нужна/показана на экране.

+0

, поэтому было бы лучше загрузить все значения, когда страница загружается. так как мой gridview находится в обновленной панели. Я мог бы вызвать другой запрос и просто обновить gridview. – MyHeadHurts

+0

и linq i означал фильтрацию набора данных с помощью linq. – MyHeadHurts

+0

Загрузите все значения только в том случае, если вы собираетесь показывать их на экране. Таким образом, вы имели в виду Linq to Objects. Ну, лично я бы предпочел сделать это с помощью SQL-сервера (вы также можете включить кеширование, чтобы не слишком сильно ударять по базе данных). –

0

Ну, я лично считаю, что если у вас уже есть все данные в памяти, было бы быстрее отфильтровать его в памяти, чем выполнять сетевой доступ. Поэтому у вас не будет последних обновлений данных , если вы не обновите его ...

Но, как сказал Дарин Димитров, если у вас уже нет всех данных, вы должны использовать запрос, запрашивая необходимые данные.

0

Фильтрация путем обратного вызова к SQL может быть дорогостоящей, например, автоматическая фильтрация стиля. То же самое можно было бы сделать, обратившись к веб-службе, где данные кэшируются.

Если у вас есть набор фильтров, в которых пользователь нажимает «Поиск», тогда обратный вызов в базе данных может быть разумным избежать кэширования данных на веб-сервере или даже клиенте.

Если у вас есть загруженная база данных, вы можете получать разные результаты, чтобы вернуться к вызову веб-службы.

В этом случае я бы рассмотрел фильтрацию в веб-службе без дополнительных вызовов БД. Говоря это, это может убить веб-сервер, если у вас много клиентов. Если вторичные фильтры значительно уменьшают набор данных, то зачем вообще его кэшировать?

К сожалению, нет лучшего способа как такового ...

+0

моя проблема заключается в том, что я пытаюсь выяснить веб-службы в vb.net (asp.net), и я не могу .. вот что я пытался сделать http://stackoverflow.com/questions/4169158/json -string-from-vb-net-side-to-asp-net – MyHeadHurts

+0

если бы вы могли помочь мне с помощью web-сервисов, это было бы здорово, я даже попробовал wcf – MyHeadHurts

+0

@NEWprogrammer: извините, я обезьяна базы данных ... – gbn