2012-04-05 7 views
5
  1. RDLCレポートがあります
  2. SQL DBに格納されている日付形式は、グルジア語です。私はペルシャ語としてレポートに日付を表​​示したい。
  3. Linqを使用して、私はDBのすべてのフィールドを選択したいだけでなく、いくつかの新しいフィールドをペルシア語の日付フィールドとして使用したいと考えています。

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

    は、以下のような新しい分野に加えて、請求書のすべてのフィールドを通過させるどのような方法がある:

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

    私はまた、新しい{請求書を選択しようとしたI構文以下で使用

、....}しかし、最初のものと同じデータ可能にはなりません。

+0

あなたの最初の構文はうまくいきません。匿名型の名前付きパラメータが必要です。また、DateTimeのキャスティングはここで動作しません。 –

答えて

5

すべてfeildsを渡すことができますが、それはそれではなく、その分野の、自分自身を請求渡す方が良いでしょう、美しいではありません。

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に慎重に作業わからないんだけど(それこれは私が最初にデータをフェッチしてから変換を行う示唆動作しない場合

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

:私は任意のIDEを持っていないと私はすべてを忘れてしまった:)いくつかの日です。

+0

ご協力いただきありがとうございます。主な問題は、RDLCレポートにデータを挿入するためのこのクエリの結果であり、請求書データ型をRDLCレポートの基本データ型として使用できる基本データ型に変換する方法がわかりません。私の知る限り、RDLCは請求書のようなデータ型をサポートしていません:( – VSB

+0

最初のサンプルに似た何かを使っている点を除いて、linq2entitiesには方法はありませんが、linq2objectには反射による汚い方法があります通常の方法では、まずDBからデータを取得して、次にUI形式でデータを変換します。 –

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型であるかどうかは注意してください。

+0

あなたの助けていただきありがとうございます。この問合せの結果としてRDLCレポートにデータを注入する必要があります。私は知っている限り、RDLCはインボイスのようなデータ型をサポートしていません:(私が知っている限り、インボイスのデータ型を基本データ型に変換する方法を知っています。 – VSB

関連する問題