2009-03-09 2 views
6

У меня есть таблица базы данных, которая может содержать много записей, и я хотел бы подсчитать текущую сумму в таблице. Я собирался сделать простой:LINQ и метод расширения Count

DataContext.Table.Count(c => c.condition); 

Пока я не понял, тип возврата для Count является int. Что делать, если таблица должна содержать больше значений, чем может быть представлена ​​в 32 битах? Как я могу их подсчитать?

Должен ли я считать их по-другому, когда мы говорим об этом виде масштаба?

+0

Хотя метод расширения LongCount() является вашим решением, но во всех возможных капюшонах вы получите исключение из памяти во время выполнения, если ваш набор результатов фильтра превышает число, представленное 'int.MaxValue'. На самом деле он будет проваливаться ниже 'int.MaxValue', забыв переходить к диапазону записей' long' (BIGINT in SQL). CLR ограничивает максимальный разрешенный размер объекта до 2 ГБ. Пожалуйста, подумайте о повторной архитектуре вашего приложения, если вы действительно принесете столько записей в память. Подробнее здесь - http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0 – RBT

ответ

10

Используйте LongCount(), то же самое, но с 64-битным результатом.

0

Моим решением было использовать метод расширения .LongCount().

+0

Не используйте ответы для ответа на другие плакаты. Используйте комментарии или отредактируйте свой вопрос. Это не дискуссионный форум. – GEOCHET

+0

Мне показалось, что он сам нашел ответ и отправил его, а не ответил. –

+0

@Mark: Его оригинальное сообщение было извинением за то, что он не нашел его. Я отредактировал его. – GEOCHET

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