2009-04-02 34 views
6

Tôi đang cố gắng tìm hiểu LINQ to SQL và tôi đã tìm hiểu về hàm LoadWith. Tất cả các ví dụ tôi đã tìm thấy sẽ tải tất cả các bản ghi từ bảng bạn chỉ định trong hàm LoadWith, ví dụ:LINQ to SQL mong muốn tải với điều kiện

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Blog>(b => b.Posts); 
this.LoadOptions = dlo; 

Điều tôi muốn biết là chỉ có thể tải trong ví dụ này chỉ là bài đăng blog cuối cùng?

Tôi đã thử

dlo.LoadWith<Blog>(b => b.Posts.Max()); 

Nhưng nó không giống như cú pháp đó.

Trả lời

7

Bạn có thể làm điều đó bằng cách sử dụng AssociateWith. Điều này sẽ làm việc:

var options = new DataLoadOptions(); 
options.AssociateWith<Blog>(b => 
    b.Posts.Where(
     p1 => p1.SomeColumn == b.Posts.Max(p2 => p2. SomeColumn) 
    )); 

Ngoài ra, nếu bạn sẽ được tải các thông tin vào một lớp học riêng biệt hoặc có thể sử dụng là một ẩn danh, bạn chỉ có thể thực hiện truy vấn như:

var query = from b in context.Blogs 
      //probably some where you already have 
      select new MyBlogs // or with no type in case it is anonymous 
      { 
       AColumn = b.AColumn, //map any other values 
       LatestPost = b.Posts.Where(
         p1 => p1.SomeColumn == b.Posts.Max(p2 => p2. SomeColumn) 
       )).ToList() 
      } 
+0

Tuyệt vời chỉ là những gì tôi đang tìm :) Chúc mừng – Alex

1

Nếu bạn chỉ muốn đăng bài cuối cùng thì tôi nghi ngờ rằng chỉ cần truy vấn cho bài đăng đó sẽ hiệu quả hơn khi sử dụng tải chậm hơn buộc tải "háo hức" theo cách này.

+0

Đó có nghĩa là làm cho 2 cuộc gọi cơ sở dữ liệu . Lý tưởng nhất là bạn có thể làm điều đó trong một. – Alex