将Linq转换为FSharp表达式
DocumentDB有一个C#中的漫游和示例项目,我正在FSharp中处理该项目。第一个任务之一是定位现有数据库。C代码是这样的将Linq转换为FSharp表达式,linq,f#,Linq,F#,DocumentDB有一个C#中的漫游和示例项目,我正在FSharp中处理该项目。第一个任务之一是定位现有数据库。C代码是这样的 var database=client.CreateDatabaseQuery().Where(db=>db.Id==“FamilyRegistry”).ToArray().FirstOrDefault(); 我试图在FSharp中使用相同的行,但是我没有得到。Where,即使我引用了相同的库。相反,我得到的是: 我对这个问题的想法错了吗?提前感谢。Linq不是C
var database=client.CreateDatabaseQuery().Where(db=>db.Id==“FamilyRegistry”).ToArray().FirstOrDefault();
我试图在FSharp中使用相同的行,但是我没有得到。Where,即使我引用了相同的库。相反,我得到的是:
我对这个问题的想法错了吗?提前感谢。Linq不是C#的专利。即使在C#中,您也需要添加对System.Linq.dll
的引用和使用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您是否添加了对System.Linq的引用?LINQ不是C#specific。即使在C#中,您也需要添加对System.Linq.dll
的引用和使用System.Linq的代码>语句就是这样。我添加了对Microsoft.Azure.Documents.Linq only->的引用,因此我引用了扩展方法,但没有引用核心。谢谢你有什么建议让这个更具F#i风格吗?让database=client.CreateDatabaseQuery().Where(fun db->db.Id=“FamilyRegistry”).ToArray().FirstOrDefault()为什么在C代码中有一个.ToArray()
调用?这是否有实际用途,还是只是浪费时间?
let countOfStudents =
query {
for student in db.Student do
select student
count
}
let database =
query {
for db in client.CreateDatabaseQuery()
where db.Id == "FamilyRegistry"
select db
headOrDefault
}