Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Linq转换为FSharp表达式_Linq_F# - Fatal编程技术网

将Linq转换为FSharp表达式

将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

DocumentDB有一个C#中的漫游和示例项目,我正在FSharp中处理该项目。第一个任务之一是定位现有数据库。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
        }