2012-04-05 5 views
5
  1. Ich habe einen RDLC-Bericht
  2. Datum Format in SQL DB gespeichert ist Georgisch. Ich möchte das Datum im Bericht als Persisch anzeigen.
  3. Mit Linq möchte ich alle Felder der DB zusätzlich ein neues Feld auswählen, das als persische Datumsfelder verwendet werden soll.

I unten Syntax verwendet:Wie wählt man alle Felder plus einige neue Felder 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 
        }; 

gibt es eine Möglichkeit, alle Bereiche der Rechnung zusätzlich zu den neuen Feldern zu passieren, wie:

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

Ich habe auch versucht, wählen Sie neue {Rechnung , ....}, aber es wird nicht zu Datentabelle gleich wie die erste ergeben.

+0

Ihre erste Syntax wird nicht funktionieren, sollten Sie Parameter für Ihren anonymen Typ benannt haben, Auch ich denke, DateTime Casting wird hier nicht funktionieren. –

Antwort

5

Sie können alle feilds passieren, aber es ist nicht schön, ist es besser, sich zu übergeben Rechnung, statt seine Felder:

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: Ich bin nicht sicher, ob diese Linien in linq2entities sorgfältig arbeiten (es einige Tage ist, ich habe keine IDE und ich vergaß alles :):

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

Wenn dies nicht, dass ich nicht arbeiten empfehlen ersten Daten holen und dann Umwandlung zu tun.

+0

danke für Ihre Hilfe. Das Hauptproblem ist, dass ich diese Abfrage führen möchte, um Daten in einen RDLC-Bericht zu injizieren, und ich weiß nicht, wie Sie Invoice Data Type in grundlegende Datentypen konvertieren, die als grundlegende Datentypen in RDLC-Bericht verwendet werden können. Soweit ich weiß, RDLC unterstützt Datentypen wie Rechnung nicht :( – VSB

+0

Es gibt keine Möglichkeit in linq2entities, außer der Verwendung von etwas ähnlich wie Ihre erste Probe, aber es gibt einen schmutzigen Weg in linq2object durch Reflexion, aber ich möchte Normaler Weise, zuerst hole ich Daten von der DB, dann wandle ich sie in zB UI-Format um –

0

Sie können die Rechnung selbst verwenden.

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

Sie können später Zugriff auf die Felder wie diese

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

Es Gießdatum auch funktioniert. Sie sollten darauf achten, dass request.DateCreation vom Typ Nullable ist, bevor Sie es umwandeln.

+0

danke für Ihre Hilfe Das Hauptproblem ist, ich will Ergebnis dieser Abfrage, um Daten in einen RDLC-Bericht zu injizieren, und ich don Ich weiß nicht, wie man Rechnungsdatentypen in grundlegende Datentypen konvertiert, die als grundlegende Datentypen im RDLC-Bericht verwendet werden können.Wenn ich weiß, RDLC unterstützt keine Datentypen wie Rechnung :( – VSB