Query
modülünde kullanılabilen groupJoin
işlevini kullanabilirsiniz. Burada yabancı anahtarla tablo olarak birincil masa ve Kategoriler olarak Ürünleri ile Northwind kullanarak bir örnek:
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
Orada seq { .. }
sözdizimi kullanarak bu ifade güzel yolu kesinlikle ve katılmak benzeri davranışları uygulayarak iç içe for
kullanarak döngüler. Maalesef, LINQ çevirmenine yapılan alıntılar muhtemelen bunları desteklemeyecektir. (Kişisel olarak, boş toplama olup olmadığını kontrol etmek için for
'u kullanarak ve if
'u kullanarak kodu yazmayı tercih ederim).
Sadece F # takım için bir taahhüt çalışmanın bir parçası olarak PowerPack kitaplığında bazı iyileştirmeler bakıyordu, bu yüzden bu umarım gelecekte artıracak ... (ama söz!)
Ancak buradaki verimi nasıl kullanabilirim? Ben 'groupJoin' işlevi bu desteklediğini sanmıyorum tüm – Cynede
kısmındaki "(yok)" dönmek istemiyorum, ama her zaman' ekleyebilir |> Seq.filter' 'null' değere sahip tüm öğeleri düşmesi . –