Tôi có cơ sở dữ liệu với hai bảng sau: Customer
và CustomerStatus
. CustomerStatus
là một bảng được gọi là chỉ đọc. Tất cả các thay đổi đối với kết quả trạng thái của khách hàng trong một INSERT vào bảng đó. Trạng thái khách hàng hiện tại có thể định vị qua CustomerStatus.StatusTimestamp
.Cách bao gồm một hàng cụ thể từ một bảng khác với LINQ đến đối tượng
Bây giờ tôi đang tìm một truy vấn LINQ to entity tải tất cả Khách hàng cùng với trạng thái hiện tại của họ. Một cái gì đó như
.Include("CustomerStatus.OrderByDescending(StatusTimestamp).FirstOrDefault()")
.
Tôi chưa tìm được cách phù hợp với EF 4.0.
workaround hiện tại của tôi là rất xấu xí và sử dụng 2 bước sau:
bước 1: LINQ truy vấn mà nạp tất cả các trạng thái (trong kinh doanh/lớp dữ liệu):
var r = from c in db.Customers.Include("CustomerStatus") select c;
bước 2: lấy tình trạng phù hợp từ mỗi khách hàng trong GUI (trong một vòng lặp trong một cái nhìn MVC3):
c.CustomerStatus.OrderByDescending(i => i.StatusTimestamp).FirstOrDefault()
Bất kỳ ý tưởng làm thế nào điều này có thể được thực hiện trực tiếp trong một bước?
Hoạt động tốt. Cảm ơn! Thực ra tôi vẫn làm điều đó trong 3 bước, nhưng tất cả trong BLL bây giờ: 1: 'var q = ...'. 2: 'var l = q.ToList()' (để bắt buộc tải trạng thái xuống). 3: 'return l.Select (i => i.Customer)' (để vẫn trả về một số IEnumerable và không phải là loại ẩn danh). –
mkva