2011-09-08 23 views
7

tengo una tabla llamada visit con las siguientes columnas:Convertir consulta SQL a LINQ

visit_Id 
member_Id 
visit_Date 
visit_Time 
visit_DateTime 
visit_Status values like (accepted, refused) 

Tengo la siguiente consulta SQL:

string sql = @"SELECT CONCAT(UPPER(SUBSTRING(visit_Status, 1, 1)), SUBSTRING(visit_Status FROM 2)) as Status, COUNT('x') AS Visits 
    FROM visits 
    WHERE visit_Date BETWEEN '2001-09-08' AND '2009-09-09' 
    GROUP BY visit_Status"; 

¿Cómo puedo convertir este SQL en LINQ? El nombre de mi entidad es dbcontext. Gracias de antemano por cualquier ayuda.

Respuesta

5

Es necesario utilizar EntityFunctions

DateTime dateFrom = new DateTime(2001, 9, 8); 
DateTime dateTo = new DateTime(2001, 9, 9); 

var query = from v in dbcontext.Visits 
      where v.visit_Date >= dateFrom && v.visit_Date <= dateTo 
      group v by v.visit_Status into vg 
      select new 
      { 
       Status = EntityFunctions.Concat(EntityFunctions.ToUpper(vg.Key[0]), 
               EntityFunctions.SubString(1, EntityFunctions.Length(vg.Key) -1), 
       Visits = vg.Count() 
      } 
+0

En segundo lugar. Supongo que me perdí lo que quería con 'x', pero sí, esto estaría bien. –

+0

@Aducci Muchas gracias ahora está trabajando ... –

+0

@cubicle Estoy representando estos datos en el gráfico ... así que quiero mostrar los miembros contar junto con el estado en el gráfico ... count (x) es el número de visitas. .... –

1

¿Me puede decir lo que está tratando de hacer con Count ('x')?

from v in dbcontext.visits 
where v.visit_Date >= "2001-09-08" && v.visitDate <= "2009-09-09" 
group by v.visit_Status 
select new 
{ 
    Status = string.Concat(char.ToUpper(v.visit_Status[0], v.visit_Status.Substring(1)), 
    Visits = //Not sure what 'x' is in your example 
} 
+0

sentimos más específicamente lo que es 'x' ya que no veo que en su tabla llamada visita. –