2016-03-21 3 views
1

У меня есть таблица для cars и TreeView так что пользователь может выбрать количество автомобилей и увидеть подробную информациюLINQ фильтр таблицы с одним большим массивом

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

Есть 1300 автомобилей. В этом случае id[] имеет 720 целых чисел. С 163 работами id в порядке.

IEnumerable<car> cresult = db.cars.Where(c => id.Any(s => s == c.car_id)).ToList(); 
               ^^^ 
               int [] 

Каков наилучший способ фильтрации моего стола с одним большим массивом?

Ошибка:

enter image description here

+0

Какой тип LINQ это? например к SQL, к объектам (версия EF?) и т. д. –

+0

@IvanStoev - это EF 6.0, с Npgsql –

+0

Не происходит с провайдером SqlServer, должно быть что-то конкретное для провайдера Npgsql. Удачи. –

ответ

2

Вы должны использовать Contains вместо Any() и делать свои собственные сравнения.

IList<car> cresult = db.cars.Where(c => id.Contains(s => c.car_id)).ToList(); 

Кроме того, это, вероятно, не очень хорошая идея, чтобы бросить в IEnumerable<car>, как только вы явно сделали работу, чтобы превратить его в список.

Для получения дополнительной выгоды от работы вы можете использовать HashSet<int>, а не int[] - хотя, по общему признанию, если это преобразование в SQL-запрос, у него, вероятно, не будет много (если есть) коэффициента усиления.

+0

что вы имеете в виду «делать свое собственное сравнение» Нужно ли написать функцию сравнения? и, пожалуйста, можете уточнить, что отличная идея? Я просто возвращаю список для показа в представлении. И я думаю, что 'IEnumerable' проще, чем' List' isnt? –

+0

@JuanCarlosOropeza Извините, возможно, «делать свое собственное сравнение» было излишним. Я имел в виду 's => s == c.car_id'. Что касается литья в 'IEnumerable ', обычно рекомендуется указывать как * максимально возможное * на возвращаемые значения. В этом случае приведение в значение 'IEnumerable ' означает, что вы теряете информацию, такую ​​как 'Count' и т. Д. Вы уже сделали работу, превратив ее в« Список », чтобы вы могли также выявить дополнительные функции. Если вы просто передаете его в элемент управления представлением, это может не повлиять, но в целом это хорошая идея. – Rob

+0

Работайте отлично, Не должно быть намного больше, Но могу ли я беспокоиться, если 'int []' больше больше? –

Смежные вопросы