我正在学习使用F#3.0的LINQ.我想知道如何重新编写旧代码以在F#3.0中使用新的LINQ功能例如,我在SQL Server 2008 R2中创建了一个简单的数据表,数据库名称是myDatabase.
-- Create the Table1 table.
CREATE TABLE [dbo].[Table1] (
[Id] INT NOT NULL,
[TestData1] INT NOT NULL,
[TestData2] FLOAT (53) NOT NULL,
[Name] NTEXT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Run Code Online (Sandbox Code Playgroud)
对于F#2.0,我可以使用数据集添加新行,如下所示:
#light
open System
open System.Collections.Generic
open System.Data
open System.Data.SqlClient
let sqlConn = "server=(local); Integrated Security=True; Database=MyDatabase"
let connDB = new SqlConnection(sqlConn)
let sql = "SELECT * FROM Table1"
let da = new SqlDataAdapter(sql, connDB)
let ds = new DataSet()
da.Fill(ds) |> ignore
let …Run Code Online (Sandbox Code Playgroud) let highs = [| 2; 4; 6 |]
let lows = [| 1; 5; 10 |]
Run Code Online (Sandbox Code Playgroud)
我想从上面得到2个数组:如果highs中的元素小于lows中的相应元素,则交换它们.所以,我可以得到最后的2个数组:
let trueHighs = [| 2; 5; 10 |]
let trueLows = [| 1; 4; 6 |]
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我正在学习RX(Reactive Extensions),并且发现有人在近一年前使用F#和RX发布了一些代码来制作一个简单的webCrawler.我试着看看我是否可以重用代码.我下载了RX,并创建了一个F#windows应用程序,添加了对System.Reactive的引用.我的IDE是VS 2010 Ultimate,RX版本是:1.1.11111.以下是代码:
#light
open System
open System.Linq
open System.Collections.Generic
open System.Net
open System.IO
open System.Threading
open System.Text.RegularExpressions
open System.Reactive
open System.Reactive.Linq
let create f =
Observable.Create<_>(fun x ->
f x
new System.Action((fun () -> ())))
let ofAsync async =
create (fun obs -> Async.StartWithContinuations(async, obs.OnNext,obs.OnError,obs.OnError))
let fromEvent (event:IEvent<_,_>) = create (fun x -> event.Add x.OnNext)
let tickEvent = new Event<unit> ()
let tickEventObs = tickEvent.Publish |> fromEvent
let fetch(url:string) =
async { let req = WebRequest.Create(url)
let! resp …Run Code Online (Sandbox Code Playgroud) 我有以下要求:根据第二个数组中元素的外观从第一个数组中获取元组数组:
let totals = [| ("old1", "new1"); ("old2", "new2"); ("old3", "new3"); ("old4", "new4") |]
let changes = [| "new1"; "new4" |]
Run Code Online (Sandbox Code Playgroud)
我想要这个:
let updates = [| ("old1", "new1"); ("old4", "new4") |]
Run Code Online (Sandbox Code Playgroud)
如果两个数组总数和更改具有相同的长度,那么我认为这很容易:
let updates = Array.zip changes totals
|> Array.choose(fun (a, B) -> if a = fst(B) then Some (B) else None)
Run Code Online (Sandbox Code Playgroud)
不幸的是,总数和变化具有不同数量的要素; 因此,我找不到一种简单的方法来获得我需要的元素.
let dTuples = new Dictionary<int, string * string * int>()
dTuples.Add(1, ("A", "OK", 1))
dTuples.Add(2, ("B", "NOK", 2))
dTuples.Add(3, ("C", "OK", 3))
Run Code Online (Sandbox Code Playgroud)
我想在字典中找到它们在值部分的第二个元素中具有"OK"的项目.我还想将结果转换为元组数组而不使用字典的关键部分.对于上面的例子,我需要这个:
let tuplesOK = [| ("A", "OK", 1); ("C", "OK", 3) |]
Run Code Online (Sandbox Code Playgroud)
如果您提供代码,请同时添加一些解释,以便我更好地理解它!谢谢,约翰