2010-01-27 20 views
7

Ho il numero di matrice = {2,3,4,5,6}in Query con matrice in LINQ

Ora devo selezionare le righe dalla tabella "dtlRecord" qualora questo numero è una colonna.

 
Number count 
2  10 
3  23 
4  20

Allora cosa ho bisogno è

select sum(count) from dtlRecord where number in (2,3,4,5,6) group by number 

Ho bisogno di sopra query LINQ to SQL

+0

Questa coprirà la parte IN: http://stackoverflow.com/questions/857973 –

risposta

0

ne dite di semplicemente utilizzando join interno:

int[] numbers = new[] { 2, 3, 4, 5, 6 }; 

from r in dtlRecord 
join number in numbers on r.Number equals number 
group r by r.Number into g 
     select new { 
      Number = g.Key, 
      Sum = g.Sum(r => r.Count) 
     }; 

o

dtlRecord 
    .Join(numbers, r => r.Number, number => number, (r, number) => new {r, number}) 
    .GroupBy(arg => arg.r.Number, arg => arg.r) 
    .Select(g => new 
    { 
     Number = g.Key, 
     Sum = g.Sum(r => r.Count) 
    }); 
1
+0

mia colonna numero sono Guid tipo di dati e quando eseguo la query in Linqpad, si dice che non è possibile formattare il nodo 'Nuovo' per l'esecuzione come SQL – jvm

+0

Se la colonna è guid, perché il tuo esempio mostra i numeri interi? –

+0

volevo solo dare un semplice esempio – jvm

3

Uso Enumerable.Contains:

int[] numbers = new[] { 2, 3, 4, 5, 6 }; 
var query = from r in dtlRecords 
      where numbers.Contains(r.Number) 
      group r by r.Number into g 
      select new { 
       Number = g.Key, 
       Sum = g.Sum(r => r.Count) 
      }; 

foreach(var result in query) { 
    Console.WriteLine("Number = {0}, Sum = {1}", result.Number, result.Sum); 
} 
+0

+1 perché la mia risposta sembrava confondere l'OP. Forse avrà più fortuna con il tuo esempio. –

+0

Grazie a tutti. Risolto. – jvm