Что лучше?DataTable.Select () или Linq для фильтрации объектов? - PullRequest
2 голосов
/ 05 марта 2011

Я храню коллекцию объектов пользовательского типа. Я дал тип ниже.

public class AnonymousClient
{
   private string ipAddress, city, country, category;
   private Guid id;
}

Возможно, мне придется отфильтровать объекты по городу, стране, категории и т. Д. Я могу думать о двух способах -

  1. Хранение в словаре Dictionary<Guid, AnonymousClient> и используя Linq для фильтрации объекты.
  2. Хранение в DataTable с несколько столбцов для членов и используя DataTable.Select () для фильтровать записи.

Полагаю, они оба зациклены внутри. Какой из них быстрее и элегантнее? Есть идеи?

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Использование DataTable добавит немного накладных расходов.Запрос проще выполнить после его настройки, поскольку код для него уже создан, но он не будет работать так быстро.

Если вы хотите искать элементы с помощью id, вы можетеиспользуйте Dictionary<Guid, AnonymousClient>, если вы хотите фильтровать данные только по другим полям, вы можете просто использовать List<AnonymousClient>.

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

Пример использования метода расширения LINQ Where:

var companies = clients.Where(c => c.category == "Company");
0 голосов
/ 05 марта 2011

Я бы пошел с первым подходом.Но вам действительно нужно хранить их в словаре?Вы уже имеете их в коллекции, верно?Вы можете использовать LINQ для фильтрации самой коллекции.

var cityFiltered = from p in AnonymousClientList where p.city == 'London' select p;

и т. д. и создать свою отфильтрованную коллекцию.

====== ОБНОВЛЕНИЕ ======

Вот обновленный запрос для фильтрации по городу:

var filtered = (from c in clients where c.Value.city=="London" select c).ToDictionary(x => x.Key, x => x.Value);

Если вы видите, первая часть в основном возвращает вам логическое значение для вашего условия, а не объект словаря, который вам нужен.Используя метод ToDictionary, вы преобразуете обратно в словарь.Итак, теперь после выполнения LINQ у вас будет весь AnonymousClient с городом, установленным в Лондон.

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