F#查询表达式/选择运算符/更改结果中的列标题

时间:2014-02-19 12:01:02

标签: f# f#-3.0

在以下代码中:

#r "System.Data.dll"
#r "FSharp.Data.TypeProviders.dll"
#r "System.Data.Linq.dll"

open System
open System.Data
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq
open System.Windows.Forms

type dbSchema = SqlDataConnection<"...">


let grid<'T> (x:seq<'T>) =...

let query1 =
    query {
        for row in db.Status do
        //select row
        select (row.StatusID, row.Name)
    }


query1 |> Seq.toArray |> grid 

enter image description here

有哪些更好的方法可以将列更改为有意义的标题(例如,来自数据源的实际列),而不仅仅是(Item1 Item2 ...)。

注意:对于网格功能,请see Tomas Petricek回复。

此致 IP

2 个答案:

答案 0 :(得分:6)

您可以选择数据作为记录,让DataGridView推断出列的名称

type Status =
    {
        StatusID: int
        Name: string
    }

let query1 =
    query {
        for row in db.Status do
        select { StatusID = row.StatusID; Name = row.Name }
    }

答案 1 :(得分:1)

使用新的Anonymous Record功能,现在在F#4.6中应该更好一些。

let query1 =
    query {
        for row in db.Status do
        //select row
        select {| StatusID = row.StatusID; Name = row.Name; |}
    }

注意|的使用。大括号内部的字符。这就是现在将常规记录与F#中的匿名记录区分开的地方。另请注意,必须在当前表单中冗余地指定属性名称StatusIDName。尽管这类似于在JavaScript中构造对象的方式,但是.NET开发人员一直在享受通过C#匿名类型使用的更为简短的语法。建议在将来的语言规范中进行后续更改,以允许使用类似的implicit property names功能。