DocumentDB在C#中有一个步行和示例项目,我正在FSharp中完成。第一个任务之一是找到现有的数据库。 C#代码就是这个
var database = client.CreateDatabaseQuery().Where(db => db.Id == "FamilyRegistry").ToArray().FirstOrDefault();
我正在尝试在FSharp中执行相同的操作,但即使我引用了相同的库,我也没有获得.Where。相反,我得到了这个:
我是否认为这个问题错了?提前谢谢。
答案 0 :(得分:14)
Linq并不特定于C#。即使在C#中,您也需要添加对System.Linq.dll
和using System.Linq;
语句的引用。 C#项目模板已经包含这些语句。
在F#中你需要做同样的事情,确保你的项目有对System.Linq的引用并添加open System.Linq
语句
至少有两种惯用方式:
您可以使用Seq模块的函数与管道运算符实现与方法链接相同的结果,例如:
let random = new System.Random()
Seq.initInfinite (fun _ -> random.Next())
|> Seq.filter (fun x -> x % 2 = 0)
|> Seq.take 5
|> Seq.iter (fun elem -> printf "%d " elem)
printfn ""
seq<'T>
是IEnumerable<T>
的同义词,因此如果将方法应用于IQueryable,它将强制执行查询。
您可以使用Query Expressions,相当于LINQ的SQL语法:
let countOfStudents =
query {
for student in db.Student do
select student
count
}
query
会返回正确的IQueryable<T>
您的具体查询可能是这样的:
let database =
query {
for db in client.CreateDatabaseQuery()
where db.Id == "FamilyRegistry"
select db
headOrDefault
}