Tôi đã có một điều khá lạ xảy ra trên một ứng dụng web ASP.NET 4.0 sử dụng EF 4.0 làm cơ sở dữ liệu phụ trợ của nó. Về cơ bản, tôi có một bảng lưu trữ các yêu cầu đặt lại mật khẩu của người dùng (có chứa khóa đặt lại là loại byte[]
, hết hạn loại DateTime
và khóa ngoài là User
có chứa string Email
và string Name
). Một số người dùng chưa đặt địa chỉ email, do đó, đối với một số PasswordRequest request
, request.Email
là null
.LINQ to Entities và chuỗi rỗng
Đây là vấn đề. Này hoạt động hoàn toàn tốt đẹp:
string u = Request["u"];
string e = Request["e"];
var requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == null && r.Expiry >= DateTime.Now
select r;
tôi nhận được số lượng dự kiến của kết quả (khác không, vì có mục với null
email).
Nhưng điều này luôn trả về một bộ sưu tập sản phẩm nào khi e
là null
:
string u = Request["u"];
string e = Request["e"];
var requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == e && r.Expiry >= DateTime.Now
select r;
Điều duy nhất mà tôi đã làm việc đúng cách (mà không logic thực hiện bất kỳ cảm giác) là:
string u = Request["u"];
string e = Request["e"];
IQueryable<PasswordRequest> requests;
if (e == null)
requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == null && r.Expiry >= DateTime.Now
select r;
else
requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == e && r.Expiry >= DateTime.Now
select r;
Tôi hoàn toàn bối rối. Ý tưởng nào?
Chính Gửi lĩnh vực trong bảng thực tế của bạn, là nó tuyên bố như là một cột NULL? – DoomerDGR8
@HassanGulzar Thật vậy. – hydroiodic
Bạn có thể đăng sql đã tạo không? – Marius