2009-03-09 12 views
6

Mam tabelę bazy danych, która może zawierać wiele rekordów i chciałbym policzyć bieżącą sumę w tabeli. Miałem zamiar zrobić prosty:LINQ i metoda przedłużania liczenia

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

aż zdałem sobie sprawę rodzaj powrotu do Count jest int. Co się stanie, jeśli tabela będzie zawierała więcej wartości niż można przedstawić w 32 bitach? Jak mogę je policzyć?

Czy powinienem liczyć je w inny sposób, gdy mówimy o takiej skali?

+0

Mimo że metoda LongCount() to twoje rozwiązanie, ale w najprawdopodobniejszej sytuacji wyjdziesz z wyjątku pamięci w czasie wykonywania, jeśli zestaw wyników filtra przekroczy liczbę reprezentowaną przez 'int.MaxValue'. W rzeczywistości zawiedzie to poniżej 'int.MaxValue', zapominając przechodzić w zakres rekordów' long' (BIGINT in SQL). CLR ogranicza maksymalny dozwolony rozmiar obiektu do 2 GB. Rozważ ponowne zaprojektowanie aplikacji, jeśli naprawdę zdarzy ci się wprowadzić te wiele zapisów do pamięci. Więcej informacji tutaj - http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0 – RBT

Odpowiedz

10

Używaj LongCount(), to samo, ale z wynikiem 64-bitowym.

0

Moim rozwiązaniem było użycie metody rozszerzania .LongCount().

+0

Nie używaj odpowiedzi, aby odpowiedzieć inne plakaty. Używaj komentarzy lub edytuj swoje pytanie. To nie jest forum dyskusyjne. – GEOCHET

+0

Brzmiało to tak, jakby sam znalazł odpowiedź i opublikował ją, zamiast odpowiadać. –

+0

@ Mark: Jego oryginalny post był przeprosinami za to, że go nie znalazłem. Edytowałem to. – GEOCHET

Powiązane problemy