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?
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