2012-04-05 11 views
5
  1. Obtuve un informe de RDLC
  2. El formato de fecha almacenado en SQL DB es georgiano. Quiero mostrar la fecha en el informe como persa.
  3. Usando Linq quiero seleccionar todos los campos de DB además algún campo nuevo para ser utilizado como campos de fechas persas.

que se utiliza por debajo de sintaxis:¿Cómo seleccionar todos los campos más algunos campos nuevos en LINQ?

var invoices = from invoice in dbContext.eve_Invoices 
        select new 
        { 

         invoice.CreatorID, 
         invoice.DateChange, 
         invoice.DateCreation, 
         invoice.DatePrint, 
         invoice.Discount, 
         invoice.DiscountPercentage, 
         invoice.DiscountType, 
         invoice.Fare, 
         invoice.ID, 
         invoice.InvoiceStatus, 
         invoice.NumberOfItems, 
         invoice.Packaging, 
         invoice.PrintID, 
         invoice.RawPrice, 
         invoice.RoundOff, 
         invoice.ServiceCharge, 
         invoice.ServingType, 
         invoice.TableID, 
         invoice.Tax, 
         invoice.TotalPrice, 
         invoice.ValidityStatus, 
         PersianYear = invoice.DateCreation != null ? pc.GetYear((DateTime)invoice.DateCreation) : 0, 
         PersianMonth = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0, 
         PersianDay = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0 
        }; 

¿Hay alguna manera de pasar todos los campos de la factura, además de nuevos campos tales como:

var invoices = from invoice in dbContext.eve_Invoices 
        select new 
        { 

         invoice.*, 
         PersianYear = invoice.DateCreation != null ? pc.GetYear((DateTime)invoice.DateCreation) : 0, 
         PersianMonth = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0, 
         PersianDay = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0 
        }; 

También probé seleccione nueva {factura , ....} sin embargo, no dará como resultado que datatable sea igual que el primero.

+0

Tu primera sintaxis no funcionará, deberías tener un parámetro con nombre para tu tipo anónimo. También creo que el casting de DateTime no funcionará aquí. –

Respuesta

5

Puede pasar todos los campos realmente, pero no es hermoso, es mejor pasar factura en sí, en lugar de sus campos:

var invoices = from invoice in dbContext.eve_Invoices 
       select new 
       { 
        RelatedInvoice = invoice, 
        PersianYear = invoice.DateCreation != null ? pc.GetYear((DateTime)invoice.DateCreation) : 0, 
        PersianMonth = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0, 
        PersianDay = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0 
       }; 

PS: No estoy seguro de estas líneas funcionan con cuidado en linq2entities (se se algunos días que no tienen ningún IDE y se me olvidó todo :):

PersianDay = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0 

Si esto no funciona sugiero primero obtener los datos y luego hacer la conversión.

+0

gracias por su ayuda. El principal problema es que deseo que esta consulta genere datos en un informe RDLC y no sé cómo convertir el tipo de datos de factura en tipos de datos básicos que pueden utilizarse como tipos de datos básicos en el informe RDLC. Por lo que yo sé, RDLC no admite tipos de datos como facturas :( – VSB

+0

No hay forma en linq2entities, excepto usar algo similar a su primera muestra, pero hay una manera sucia en linq2object por reflexión, pero me gustaría De manera normal, primero voy a buscar datos de DB, luego los convertiré en formato de interfaz de usuario, por ejemplo, –

0

Puede usar la factura misma.

var invoices = from invoice in dbContext.eve_Invoices 
       select new 
       { 
       invoice, 
       PersianYear = invoice.DateCreation != null ? >pc.GetYear((DateTime)invoice.DateCreation) : 0, 
       PersianMonth = invoice.DateCreation != null ? >pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0, 
       PersianDay = invoice.DateCreation != null ? >pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0 
       }; 

Usted puede más adelante en el acceso a los campos de este tipo

foreach (var invc in invoices) 
    { 
    //invc.invoice.CreatorID 
    } 

La fecha de tiempo de lanzamiento también funciona. Debe tener cuidado si invoice.DateCreation es de tipo Nullable antes de enviarlo.

+0

, gracias por su ayuda. El principal problema es que quiero que el resultado de esta consulta sea inyectar datos en un informe RDLC. No sé cómo convertir el tipo de datos de factura a tipos de datos básicos que se pueden utilizar como tipos de datos básicos en el informe RDLC. Por lo que sé, RDLC no admite tipos de datos como la factura :( – VSB

Cuestiones relacionadas