2012-04-05 19 views
5
  1. Ho ricevuto un rapporto RDLC
  2. Il formato data memorizzato nel DB SQL è georgiano. Voglio visualizzare la data nel rapporto come persiano.
  3. Utilizzo di Linq Voglio selezionare tutti i campi del DB oltre a qualche nuovo campo da utilizzare come campi di data persiani.

Ho usato sotto sintassi:Come selezionare tutti i campi più alcuni nuovi campi in 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 
        }; 

c'è alcun modo per passare tutti i campi della fattura oltre a nuovi settori quali:

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 
        }; 

Ho anche provato select new {fattura , ....} tuttavia non risulterà più datatable del primo.

+0

La tua prima sintassi non funzionerà, dovresti avere un parametro con nome per il tuo tipo anonimo, inoltre penso che il casting DateTime non funzioni qui. –

risposta

5

È possibile passare tutte le feilds, ma non è bello, è meglio passare fattura stessa, invece di suoi campi:

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: Non sono sicuro di questo le linee lavorano con cura in linq2entities (esso è qualche giorno che non hanno alcun IDE e ho dimenticato tutto :):

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

Se questo non funziona suggerisco prima recuperare i dati e poi fare la conversione.

+0

grazie per il vostro aiuto. Il problema principale è il risultato di questa query per l'inserimento di dati in un report RDLC e non so come convertire il tipo di dati di fatturazione in tipi di dati di base che possono essere utilizzati come tipi di dati di base nel report RDLC. Per quanto ne so, RDLC non supporta i tipi di dati come la fattura :( – VSB

+0

Non c'è modo in linq2entities, eccetto l'uso di qualcosa di simile al tuo primo campione, ma c'è un modo sporco in linq2object per riflessione, ma mi piacerebbe in modo normale, prima recupererò i dati dal DB, quindi li convertirò in formato UI. –

0

È possibile utilizzare la fattura stessa.

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 
       }; 

È possibile in seguito accedere ai campi come questo

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

La data tempo di lancio funziona anche. Dovresti fare attenzione se la fattura.DateCreation è di tipo Nullable prima di lanciarla.

+0

grazie per il tuo aiuto. Il problema principale è che voglio portare a termine questa query per inserire dati in un rapporto RDLC e Sappiamo come convertire il tipo di dati di fatturazione in tipi di dati di base che possono essere utilizzati come tipi di dati di base nel report RDLC. Per quanto ne so, RDLC non supporta tipi di dati come la fattura :( – VSB

Problemi correlati