2014-08-28 14 views
8

Tôi có truy vấn LINQ phải truy xuất một số giá trị DateTime. Đôi khi tôi không có phù hợp cho và tôi phải trả về NULL cho rằng giá trị DateTime thay vì giá trị mặc định cho DateTime.Trả lại giá trị rỗng thay vì giá trị mặc định trong LINQ

Làm cách nào tôi có thể tránh điều đó và trả về giá trị NULL thay vì defaul?

My LINQ:

CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault() 

Trong DefaultIfEmpty tôi có thể đặt chỉ DateTime.

+2

Bạn không thể có một DateTime trống vì đó là loại giá trị. Bạn có thể sử dụng một kiểu nullable ('DateTime?'). – Mephy

Trả lời

7

Truyền tới DateTime? sẽ gây ra DefaultIfEmpty tạo bộ sưu tập mặc định chứa giá trị null nếu bộ sưu tập trống.

CreatedDate = ctaMatch 
    .Select(d => (DateTime?)d.CreatedDate) 
    .DefaultIfEmpty() 
    .FirstOrDefault() 

PS: Các DefaultIfEmpty có thể được bỏ qua, bởi vì nó tiếp theo FirstOrDefault.

+1

Bằng cách sử dụng 'DefaultIfEmpty()', điều này có làm cho 'Default' trong' FirstOrDefault() 'thừa không? Đây có nên là 'Đầu tiên()' không? – Sam

+0

@Sam, có nếu nó được theo sau bởi 'FirstOrDefault' thì không cần thiết. –

7

Bạn có thể truyền tới số Nullable<DateTime>.

ctaMatch.Select(d => (DateTime?)d.CreatedDate).FirstOrDefault() 

... do đó đặt giá trị mặc định là null.

+0

Đơn giản. Yêu nó. – user1191559

3

Cú pháp thay thế ... lấy phần tử First nếu tồn tại Any; nếu không hãy sử dụng null:

DateTime? CreatedDate = ctaMatch.Any() ? ctaMatch.First().CreatedDate : (DateTime?)null; 
+0

Lần cast cuối cùng có cần thiết không? '(DateTime?)'. Nếu 'CreatedDate' là kiểu DateTime? sau đó chỉ gán 'null' cho công việc. 'CreatedDate = ctaMatch.Any()? ctaMatch.First(): null; ' – broadband

+0

@broadband Nếu' CreatedDate' thuộc kiểu 'DateTime?', thì bạn đã đúng - việc cast sẽ không cần thiết. Tuy nhiên, trong trường hợp của OP, 'CreatedDate' là một' DateTime' không có giá trị, và do đó giá trị mặc định là "1/1/0001", mà anh ta không muốn. Trong trường hợp đó, dàn diễn viên là cần thiết. –

+0

Tôi cho rằng bạn có nghĩa là không có giá trị 'DateTime' chỉ' DateTime createdDate' (không có '?' Ở cuối 'DateTime'). Ngay cả khi CreatedDate là không nullable bạn không thể gán với cast DateTime. 'DateTime CreatedDate = (DateTime?) Null; sẽ không biên dịch – broadband

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