5
  1. RDLCレポートを受け取りました
  2. SQLDBに保存されている日付形式はグルジア語です。レポートに日付をペルシア語で表示したい。
  3. Linqを使用して、DBのすべてのフィールドに加えて、ペルシア語の日付フィールドとして使用されるいくつかの新しいフィールドを選択したいと思います。

以下の構文を使用しました:

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

次のような新しいフィールドに加えて、請求書のすべてのフィールドを渡す方法はありますか?

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

また、新しい{invoice、....}を選択しようとしましたが、最初のものと同じデータテーブルにはなりません。

4

2 に答える 2

5

すべてのフィールドを渡すことができますが、それは美しくありません。フィールドではなく、請求書自体を渡す方がよいでしょう。

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: この行が linq2entities で慎重に機能するかどうかはわかりません (IDE がなく、すべてを忘れてしまった日もあります:):

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

これがうまくいかない場合は、まずデータを取得してから変換することをお勧めします。

于 2012-04-05T22:33:11.570 に答える
0

請求書自体を使用できます。

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

後でこのようなフィールドにアクセスできます

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

日時のキャストも機能します。キャストする前に、invoice.DateCreation が Nullable 型であるかどうかに注意する必要があります。

于 2012-04-06T07:27:24.293 に答える