5 votes

Comment sélectionner tous les champs plus quelques nouveaux champs dans LINQ ?

  1. J'ai reçu un rapport RDLC
  2. Le format de date stocké dans la base de données SQL est le format géorgien. Je veux afficher la date dans le rapport en persan.
  3. En utilisant Linq, je veux sélectionner tous les champs de la base de données et ajouter un nouveau champ à utiliser comme champ de date persane.

J'ai utilisé la syntaxe suivante :

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

Existe-t-il un moyen de transmettre tous les champs de la facture en plus des nouveaux champs tels que :

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

J'ai également essayé select new {invoice,....} mais le résultat n'est pas le même que le premier.

5voto

Saeed Amiri Points 16317

On peut passer tous les champs, mais ce n'est pas beau, il vaut mieux passer la facture elle-même, plutôt que ses champs :

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

P.S : Je ne suis pas sûr que ces lignes fonctionnent correctement dans linq2entities (il y a quelques jours, je n'ai pas d'IDE et j'ai tout oublié :) :

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

Si cela ne fonctionne pas, je suggère de récupérer d'abord les données, puis d'effectuer la conversion.

0voto

userGS Points 220

Vous pouvez utiliser la facture elle-même.

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

Vous pouvez ensuite accéder aux champs comme suit

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

L'enregistrement de la date et de l'heure fonctionne également. Vous devez veiller à ce que invoice.DateCreation soit de type Nullable avant de le lancer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X