小编Jiz*_*ugu的帖子

groupby在F#3.0查询中的多个列

只需尝试F#3.0,就多列分组而言,只需要花一点时间.显而易见的是

query {
    for d in context.table do
    groupBy (d.col1,d.col2) into g
    select (g.Key)
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了"LINQ to Entities中只支持无参数构造函数和初始值设定项".例外.

我似乎无法在msdn上找到一个例子

http://msdn.microsoft.com/en-us/library/hh225374(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/hh361035(v=vs.110).aspx

而且我意识到我的问题类似于" F#中的实体框架和匿名类型 ",但它似乎是专注于powerpack/F#2.x而且我希望F#3.0有一个优雅的答案......任何想法?

更新:

我在阅读Brian的帖子时遇到了CLIMutable属性:

http://blogs.msdn.com/b/fsharpteam/archive/2012/07/19/more-about-fsharp-3.0-language-features.aspx

我很乐观,所以我试过了

[<CLIMutable>]
type MyRecord = { Column1 : int; Column2 : int }

query {
    for d in context.table do
    groupBy {Column1 = col1; Column2 = col2} into g
    select (g.Key)
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到完全相同的例外.

f# f#-3.0

37
推荐指数
1
解决办法
2654
查看次数

Unchecked.defaultof列表

考虑:

> Unchecked.defaultof<list<int>>;;
val it : int list = null
> 2 :: 1 :: Unchecked.defaultof<list<int>>;;
val it : int list = [2]
Run Code Online (Sandbox Code Playgroud)

这种行为背后的原因是什么?我希望最终列表为[2; 1]或引发异常.

f#

24
推荐指数
1
解决办法
1106
查看次数

.NET XmlSerializer和小数

我在远程xsd文件上使用xsd.exe来生成一些C#类定义.一种类型定义为

<xs:element name="amount">
    <xs:simpleType>
        <xs:restriction base="xs:decimal">
            <xs:fractionDigits value="2"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

当我尝试反序列化xml文件时,我收到错误:

There is an error in XML document (30, 12). ---> System.FormatException: Input string was not in a correct format.
Run Code Online (Sandbox Code Playgroud)

只有当逗号用作分组分隔符(即87,000)时才会出现这种情况.如果我通过并删除逗号,无论何处出现错误,反序列化都可以正常工作.

我可以对xsd进行一些修改以允许逗号分组吗?或者更好的方法是在我的代码中允许它?尝试使用逗号解析我的代码中的小数点工作正常,它只是不喜欢它在xml文件中.

.net c# xml xsd

4
推荐指数
1
解决办法
1459
查看次数

F#可变,没有MEF的初始值

我有一堆导出IModule接口的模块.所以在主程序中我没有问题

...
let mutable modules = Seq.empty
[<ImportMany>]
member x.Modules
    with get():IEnumerable<Lazy<IModule, IModuleData>> = modules
    and set(a) = modules <- a
...
Run Code Online (Sandbox Code Playgroud)

但是现在我需要将一个接口公开给那些模块.因此每个模块都将导入一个接口

...
let mutable parent:IParent = ?
[<Import>]
member x.Parent
    with get():IParent = parent
    and set(a) = parent <- a
...
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,当我没有初始值时,如何创建我的可变"父"?此外,这是将API公开回组件部分的适当方法吗?

f# mef

1
推荐指数
1
解决办法
285
查看次数

标签 统计

f# ×3

.net ×1

c# ×1

f#-3.0 ×1

mef ×1

xml ×1

xsd ×1