2012-04-05 6 views
5
  1. Tôi nhận báo cáo RDLC
  2. Định dạng ngày được lưu trong SQL DB là tiếng Georgia. Tôi muốn hiển thị ngày trong báo cáo là tiếng Ba Tư.
  3. Sử dụng LINQ tôi muốn chọn tất cả các trường của DB ngoài một số trường mới sẽ được sử dụng làm Trường ngày Ba Tư.

tôi sử dụng dưới đây cú pháp:Làm thế nào để chọn tất cả các trường cộng với một số trường mới trong 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 
        }; 

là có cách nào để vượt qua tất cả các lĩnh vực hóa đơn, thêm vào các lĩnh vực mới như:

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

Tôi cũng đã cố gắng chọn mới {hóa đơn , ....} tuy nhiên nó sẽ không dẫn đến dữ liệu giống như lần đầu tiên.

+0

Cú pháp đầu tiên của bạn sẽ không hoạt động, bạn nên đặt tên cho tham số cho loại ẩn danh của mình, Ngoài ra tôi nghĩ rằng việc đúc DateTime sẽ không hoạt động ở đây. –

Trả lời

5

Bạn có thể vượt qua tất cả các feilds, nhưng nó không đẹp, nó tốt hơn để vượt qua hóa đơn riêng của mình, thay vì lĩnh vực của nó:

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: Tôi không chắc chắn dòng này làm việc một cách cẩn thận trong linq2entities (nó là một số ngày tôi không có bất kỳ IDE và tôi quên tất cả mọi thứ :):

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

Nếu điều này không hoạt động, tôi đề nghị tìm nạp dữ liệu đầu tiên và sau đó chuyển đổi.

+0

cảm ơn sự giúp đỡ của bạn. Vấn đề chính là tôi muốn kết quả của truy vấn này để tiêm dữ liệu vào báo cáo RDLC và tôi không biết cách chuyển đổi kiểu dữ liệu hóa đơn thành kiểu dữ liệu cơ bản có thể được sử dụng làm kiểu dữ liệu cơ bản trong báo cáo RDLC. Theo như tôi biết, RDLC không hỗ trợ các kiểu dữ liệu như hóa đơn: ( – VSB

+0

Không có cách nào trong linq2entities, ngoại trừ sử dụng một cái gì đó tương tự như mẫu đầu tiên của bạn, nhưng có một cách bẩn trong linq2object bằng cách phản ánh, nhưng tôi muốn theo cách thông thường, trước tiên tôi sẽ lấy dữ liệu từ DB, sau đó tôi sẽ chuyển đổi chúng theo định dạng UI, ví dụ: –

0

Bạn có thể tự sử dụng hóa đơn.

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

Bạn có thể sau đó về tiếp cận các lĩnh vực như

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

Ngày thời gian đúc này cũng làm việc. Bạn nên cẩn thận nếu invoice.DateCreation là kiểu Nullable trước khi truyền nó.

+0

cảm ơn sự giúp đỡ của bạn Vấn đề chính là tôi muốn kết quả của truy vấn này để tiêm dữ liệu vào báo cáo RDLC và i don không biết cách chuyển đổi kiểu dữ liệu hóa đơn thành kiểu dữ liệu cơ bản có thể được sử dụng làm kiểu dữ liệu cơ bản trong báo cáo RDLC.Khi tôi biết, RDLC không hỗ trợ kiểu dữ liệu như hóa đơn: ( – VSB