Когда мне нужно было получить доступ к базе данных из F # в тестовом проекте, я использовал LINQ to SQL из F #. Я просто добавил проект C # в решение, поместил DataContext в проект C # и использовал сгенерированные классы C # LINQ to SQL в своем проекте F #.
Сначала вам нужно сослаться на сборки FSharp.PowerPack и FSharp.PowerPack.Linq . Тогда вы можете open Microsoft.FSharp.Linq
.
Вот пример, который анализирует теги «Site» из XDocument, создает экземпляры класса Site
(сгенерированный C # класс LINQ to SQL), а затем вставляет их в базу данных, используя контекст данных L2S.
let sites = doc.Descendants(ns + "Site")
|> Seq.map (fun el -> new Site (
Url = xstr(el.Element(ns + "DataUrl")),
Rank = xint(el.Element(ns + "Rank"))
))
use db = new SomeDataContext()
db.Sites.InsertAllOnSubmit(sites)
db.SubmitChanges()
Как вы можете видеть, хотя он и использует классы C #, это не совсем обязательный код.
Вот пример использования версии LINQ для F #, чтобы найти максимальный ранг всех записей сайта в базе данных. Да, это переводится в SQL и выполняется в базе данных.
use db = new SomeDataContext()
Query.query <@ seq { for s in db.Sites -> s.Rank } |> Seq.max @>
Наконец, вот некоторая дополнительная информация о LINQ с F # .