2009-03-09 23 views
6

Ho una tabella di database che potrebbe contenere molti record e vorrei contare il totale corrente nella tabella. Stavo per fare un semplice:LINQ e il metodo di estensione Count

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

Fino a quando ho capito il tipo di ritorno per Count è int. Cosa succede se la tabella deve contenere più valori di quelli che possono essere rappresentati in 32 bit? Come posso contarli?

Devo contarli in un modo diverso quando parliamo di quel tipo di scala?

+0

Anche se il metodo di estensione LongCount() è la soluzione, ma in tutte le probabilità, si uscirà dall'eccezione di memoria in fase di esecuzione se il set di risultati del filtro sta superando il numero rappresentato da "int.MaxValue'. In effetti, fallirà molto al di sotto di 'int.MaxValue', dimenticando la gamma di record' long' (BIGINT in SQL). CLR limita la dimensione massima consentita di un oggetto a 2 GB. Ti preghiamo di prendere in considerazione la possibilità di riprogettare la tua applicazione se ti capita davvero di portare quei record in memoria. Maggiori dettagli qui - http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0 – RBT

risposta

10

Utilizzare LongCount(), stessa cosa ma con un risultato a 64 bit.

0

La mia soluzione era utilizzare il metodo di estensione .LongCount().

+0

Non utilizzare le risposte per rispondere a altri poster. Utilizza i commenti o modifica la tua domanda. Questo non è un forum di discussione. – GEOCHET

+0

Mi sembrava che avesse trovato la risposta da solo e l'avesse pubblicata, invece di rispondere. –

+0

@Mark: il suo post originale era una scusa per non averlo trovato. L'ho modificato – GEOCHET

Problemi correlati