2010-09-14 16 views
7

Estoy escribiendo una consulta en la que quiero contar la cantidad de veces que contactamos a nuestro centro de llamadas por fecha. Parece bastante fácil, pero dado que el campo de fecha de contacto es un campo de fecha y hora, obtengo la hora, por lo que cuando agrupe por fecha de contacto (hora) cada instancia de fecha de contacto tiene un recuento de '1'. Entonces, quiero agrupar solo la fecha sin el tiempo. A continuación se muestra la expresión que utilizo para consultar la base de datos:Devolver fechas sin tiempos en una consulta LINQ

MyDataContext db = new MyDataContext(); 
var items = (from h in db.ContactHistories 
      group h by h.contact_dt into g 
      orderby g.Key 
      select new 
      { 
       contact_dt = g.Key, 
       item_count = g.Count() 
      }).Take(50); 

He tratado de utilizar

 h.contact_dt.ToShortDateString() 

Pero eso no funciona desde SQL sabe nada de ToShortDateString(). Cualquier idea es grandemente apreciada.

Gracias!

EDIT:

El .Tomar (50) está en su lugar para limitar el número de registros llego hasta añado los selectores de fecha y una cláusula where, así que no se deje todos los registros de 400K. ;)

Respuesta

14

Uso del Date propiedad:

group h by h.contact_dt.Date into g 

LINQ a SQL sabe acerca de eso - ver this handy page de métodos y propiedades "entendida".

EDIT: Bueno, por lo que la agrupación directamente no funciona ... ¿qué tal si tratamos de darle un poco de ayuda:

var items = (from h in db.ContactHistories 
      select h.Date into date 
      group date by date into g 
      orderby g.Key 
      select new 
      { 
       contact_dt = g.Key, 
       item_count = g.Count() 
      }).Take(50); 

No sé si funcionará, pero es vale la pena intentarlo ...

+0

@Jon Skeet hace el tipo predeterminado para un DateTime (SQL) es un DateTime (.NET) – msarchet

+3

Vea http://msdn.microsoft.com/en-us/library/bb882657.aspx para obtener una lista de todos Métodos compatibles con DateTime para LINQ to SQL –

+0

@Hightechrider: Eso es genial, gracias. No lo sabía antes. Se editará para promocionar el enlace ... –

4

Utilice la propiedad .Date del objeto DateTime.

Cuestiones relacionadas