use*_*480 2 linq f# fsharp.data.sqlclient
在操作通过FSharp.Data.SqlClient检索的数据时,在Sequence模块上使用查询表达式有什么优势吗?
例如:
query{
for row in SelectAllCategories.Execute() do
where row.Id = 1
select {
Id = row.Id;
Category = row.CategoryName
}
}
Run Code Online (Sandbox Code Playgroud)
与
SelectAllCategories.Execute()
|> Seq.filter (fun x -> x.Id = 1)
|> Seq.map (fun x ->
{
Id = x.Id;
Category = x.CategoryName
}
Run Code Online (Sandbox Code Playgroud)
就此而言,您甚至可以考虑使用LINQ.那么有什么好处,特别是关于FSharp.Data.SqlClient?
在这种特殊情况下,FSharp.Data.SqlClient提供默认IEnumerable<ProvidedType>.Record结果类型,而不是IQueryable<ProvidedType>任何类型.与SQL引擎的所有通信对查询表达式都是不透明的,被封装到提供的SqlCommandProvider.Execute()方法中.因此,query {...}使用Linq-to-Sql的任何潜在好处都没有在这里发挥作用.
因此,与Seq模块中的函数的情况相比,与查询表达式相关的底层desugared机制产生的开销更少,我不会感到惊讶.这里没有使用查询表达式的优点.