Tôi nghĩ bạn có thể sử dụng chức năng groupJoin
có sẵn trong mô-đun Query
. Dưới đây là một ví dụ sử dụng Northwind với các sản phẩm như bảng tiểu học và mục như bảng với chính nước ngoài:
open System.Linq
<@ Query.groupJoin
db.Products db.Categories
(fun p -> p.CategoryID.Value)
(fun c -> c.CategoryID)
(fun p cats ->
// Here we get a sequence of all categories (which may be empty)
let cat = cats.FirstOrDefault()
// 'cat' will be either a Category or 'null' value
p.ProductName, if cat = null then "(none)" else cat.CategoryName) @>
|> query
Có chắc chắn là cách đẹp hơn thể hiện này bằng cách sử dụng cú pháp seq { .. }
và bằng cách thực hiện hành vi tham gia giống như sử dụng lồng nhau for
vòng lặp. Unfortunatelly, các trích dẫn cho dịch giả LINQ có lẽ sẽ không hỗ trợ những điều này. (Cá nhân, tôi muốn viết mã bằng cách sử dụng lồng nhau for
và sử dụng if
để kiểm tra bộ sưu tập trống).
Tôi chỉ nhìn vào một số cải tiến trong thư viện PowerPack là một phần trong công việc ký kết hợp đồng cho # đội F, vì vậy đây hy vọng sẽ cải thiện trong tương lai ... (nhưng không hứa hẹn!)
Nguồn
2011-01-10 23:20:37
nhưng làm cách nào tôi có thể sử dụng lợi nhuận ở đây? Tôi không muốn trả về "(none)" ở tất cả – Cynede
Tôi không nghĩ rằng hàm 'groupJoin' hỗ trợ điều này, nhưng bạn luôn có thể thêm' |> Seq.filter' để thả tất cả các mục có giá trị 'null' . –