2009-10-20 9 views
27

Estoy buscando el equivalente de LINQ to SQL para esta consulta:Linq a SQL: ¿cómo agregar sin un grupo?

SELECT 
    [cnt]=COUNT(*), 
    [colB]=SUM(colB), 
    [colC]=SUM(colC), 
    [colD]=SUM(colD) 
FROM myTable 

Este es un agregado sin un grupo de. Parece que no puedo encontrar ninguna forma de hacerlo, salvo emitir cuatro consultas separadas (una cuenta y tres suma). ¿Algunas ideas?

+1

http://social.msdn.microsoft.com/forums/en-US/linqproject general/thread/3ef94aba-cb2d-45b4-8a6e-f3fc48cd8817/ –

Respuesta

30

Esto es lo que he encontrado parece que todavía tiene que hacer un grupo por ... sólo se puede utilizar constante:

var orderTotals = 
    from ord in dc.Orders 
    group ord by 1 into og 
    select new 
    { 
     prop1 = og.Sum(item=> item.Col1), 
     prop2 = og.Sum(item => item.Col2), 
     prop3 = og.Count(item => item.Col3) 
    }; 

Esto produce el siguiente código SQL, que no es óptimo, pero funciona:

SELECT SUM([Col1]) as [prop1], SUM([Col2]) as [prop2], COUNT(*) AS [prop3] 
FROM (
    SELECT 1 AS [value], [t0].[Col1], [t0].[Col2], [t0].[Col3] 
    FROM [table] AS [t0] 
    ) AS [t1] 
GROUP BY [t1].[value] 
+0

Eso es cojo, pero funciona totalmente. Gracias. – Portman

+0

totalmente de acuerdo – CSharpAtl

12

Usted puede hacer la misma consulta utilizando la expresión Lambda de la siguiente manera:

var orderTotals = db.Orders 
         .GroupBy(i => 1) 
         .Select(g => new 
         { 
          cnt = g.Count(), 
          ScolB = g.Sum(item => item.ColB), 
          ScolC = g.Sum(item => item.ColC) 
         });