F#linq查询和可空铸造

时间:2014-01-06 12:48:10

标签: linq nhibernate f#

我有针对nhibernate运行的以下C# LINQ查询:

var items = new int[] { 1,2};

var c11 = session.Query<Parent>()
   .Where(p => p.Children.Any(c => items.Contains((int)c.FIELD))).ToList();

在这种情况下,c.FIELDNullable<int>,当我检查 IL 代码时,转换为int转换为Expression.Convert

如何翻译此F#,因为F#我无法将Nullable<int>转换为int。我只能调用op_Explicit但是转换为不同于Expression.Convert的表达式。我被困在这一点上。

1 个答案:

答案 0 :(得分:0)

您正在寻找的是Operators.int<^T> Function

  

将参数转换为带符号的32位整数。这是所有原始数字类型的直接转换。对于字符串,使用Parse和InvariantCulture设置转换输入。否则,操作需要在输入类型上使用适当的静态转换方法。

query { for parent in session.Query<Parent>() do
        where (parent.Children.Any (fun c -> items.Contains (int c.FIELD)))
        select parent }