2012-04-05 77 views
5
  1. 我得到了RDLC报告
  2. 存储在SQL DB中的日期格式是格鲁吉亚语。我想在报告中显示日期为波斯语。
  3. 使用Linq我想选择数据库的所有字段,另外还有一些新的字段用作波斯日期字段。

我用下面的语法:如何选择所有字段加上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 
        }; 

我也尝试选择新的{发票,....}但是它不会导致数据表与第一个数据表相同。

+0

你的第一个语法不会工作,你应该为你的匿名类型命名参数,我也认为DateTime的铸造不会在这里工作。 – 2012-04-05 22:35:28

回答

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 

如果这不工作,我建议首先获取数据,然后做转换。

+0

感谢您的帮助。主要的问题是我想要这个查询的结果注入数据到RDLC报告,我不知道如何将发票数据类型转换为基本数据类型,可以在RDLC报告中用作基本数据类型。据我所知,RDLC不支持数据类型,如发票:( – VSB 2012-04-06 14:02:53

+0

linq2entities没有办法,除了使用类似于你的第一个示例,但linq2object反射,但我想要一个肮脏的方式,但我想正常的方式,首先我会从数据库中获取数据,然后我会将它们转换为例如UI格式。 – 2012-04-06 14:06:24

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报表中基本数据类型的基本数据类型。据我所知,RDLC不支持数据类型,如发票:( – VSB 2012-04-06 14:01:48

相关问题