如何在LINQ中选择所有字段和一些新字段?

  1. 我收到了一份RDLC报告
  2. 存储在SQL DB中的日期格式为格鲁吉亚语。 我想在报告中显示日期为波斯语。
  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,….}但是它不会导致数据表与第一个相同。

你可以通过所有的游艇,但它不漂亮,最好通过发票本身,而不是其字段:

 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 

如果这不起作用,我建议先获取数据,然后进行转换。

您可以使用发票本身。

 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类型,您应该注意。