2008-10-04 52 views
11

Khi tôi lấy một bản ghi bằng LINQ có trường DateTime chỉ có ToString() có sẵn.Ngày giờ, Ngày giờ? và LINQ

Đâu là tất cả các phương pháp DateTime khác?

tôi phải Convert.ToDateTime các DateTime? Trường trả về?

sự khác biệt giữa (DateTime) và (DateTime?)

Trả lời

16

Nếu bởi DateTime? bạn có nghĩa là một Nullable<DateTime>, sau đó bạn có thể nhận được giá trị DateTime qua thuộc tính DateTime?.Value.

+0

... hoặc bằng cách truyền Ngày giờ? vào một DateTime. Trong cả hai trường hợp, bạn nên kiểm tra nếu nó là null đầu tiên hoặc bạn sẽ nhận được một ngoại lệ. – Lucas

+0

Cảm ơn! Tôi biết nó đã được gần một năm trước, nhưng câu trả lời của bạn chỉ giữ cho tôi từ đăng một câu hỏi mới. –

0

Các namespace va chạm ngoài là gì, tôi biết rằng datetime SQL của có một kỷ nguyên khác nhau (và do đó một phạm vi khác nhau của ngày hợp lệ) so với C# datetime.

Cố gắng gửi một new DateTime() đến một thủ tục lưu trữ và xem những gì tôi có ý nghĩa.

9

Trong SQL, DateTimes được phép là rỗng. Trong C# DateTimes không thể rỗng. Bạn có thể đọc một chút về nullable value types. Vì các biến có giá trị không thể là rỗng, nên một lớp chung được tạo để xử lý tình huống này. Nó được gọi là Nullable <> và nó thường được viết với dấu chấm hỏi sau loại.

Để sử dụng những giá trị mà bạn sẽ muốn kiểm tra tài sản .HasValue. Đó là một boolean mà biết liệu có một giá trị trong đối tượng hay nó là null. Khi bạn đã kiểm tra xem thuộc tính .HasValue có đúng không, bạn có thể sử dụng thuộc tính .Value một cách an toàn. Thuộc tính .Value sẽ thuộc kiểu DateTime.

+0

HasValue khá hữu ích đối với tôi khi làm việc với việc kiểm tra các giá trị số nguyên NULL trong truy vấn LINQ như sau: c.Field (Of Integer?) ("SecondaryID"). HasValue – atconway

2

Trong SQL, bạn có lĩnh vực DateTime thiết lập thành Allow Null. Sau đó, trong LINQ, khi bạn sẽ truy cập vào trường, .NET không biết nếu trường thực sự là một ngày hay không, đó là lý do tại sao bạn phải Convert.ToDateTime() trước khi bất kỳ phương thức ngày nào có sẵn cho bạn.

Nếu trường sẽ luôn luôn chứa một ngày, thiết lập các cột cơ sở dữ liệu để NOT NULL và bạn cần sử dụng tốt.

Các vấn đề liên quan