2010-01-27 10 views
7

tengo número de matriz = {2,3,4,5,6}Cuando, en consulta con matriz en LINQ

ahora tengo que seleccionar las filas de la tabla "dtlRecord" donde este número es una columna.

 
Number count 
2  10 
3  23 
4  20

Así que lo que necesito es

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

necesito por encima de consulta en LINQ to SQL

+0

Esto cubrirá la parte EN: http://stackoverflow.com/questions/857973 –

Respuesta

0

¿Qué tal el uso de combinación interna:

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

mi columna número son Guid tipo de datos y cuando ejecuto la consulta en Linqpad, dice No se pudo formatear el nodo 'Nuevo' para su ejecución como SQL – jvm

+0

Si su columna es guid, ¿por qué su ejemplo muestra números enteros? –

+0

solo quería dar el ejemplo simple – 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 porque mi respuesta pareció confundir al OP. Tal vez él tenga mejor suerte con tu ejemplo. –

+0

Gracias a todos. Resuelto. – jvm