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

VSB*_*VSB 5 c# linq rdlc linq-to-sql

  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
                    };
Run Code Online (Sandbox Code Playgroud)

除了新字段之外,有没有办法传递发票的所有字段,例如:

    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
                    };
Run Code Online (Sandbox Code Playgroud)

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

Sae*_*iri 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
                };
Run Code Online (Sandbox Code Playgroud)

PS:我不确定这些行在linq2entities中是否正常工作(有些日子我没有任何IDE而忘记了一切:):

PersianDay = invoice.DateCreation != null ? pc.GetDayOfMonth((DateTime)invoice.DateCreation) : 0
Run Code Online (Sandbox Code Playgroud)

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