扩展计算表达式的意思是使用CustomOperation属性定义的自定义关键字的计算表达式.
在阅读扩展计算表达式时,我遇到了@kvb非常酷的IL DSL:
let il = ILBuilder()
// will return 42 when called
// val fortyTwoFn : (unit -> int)
let fortyTwoFn = 
    il {
        ldc_i4 6
        ldc_i4_0
        ldc_i4 7
        add
        mul
        ret
    }
我想知道如何在不使用for..in..do构造的情况下构成操作.我的直觉是它从x.Zero成员开始,但我没有找到任何参考来验证.
如果上面的例子太技术性,那么这里是类似的DSL,其中列出了幻灯片的组件而没有for..in..do:
page {
      title "Happy New Year F# community"
      item "May F# continue to shine as it did in 2012"
      code @"…"
      button (…)
} |> SlideShow.show
我有几个密切相关的问题:
For成员的情况下定义或使用扩展计算表达式(即提供一个小的完整示例)?如果他们不再是monad我不担心,我对他们开发DSL感兴趣.let!和 …我一直在查看查询表达式http://msdn.microsoft.com/en-us/library/vstudio/hh225374.aspx
而且我一直在想为什么以下是合法的
let testQuery = query {
        for number in netflix.Titles do
        where (number.Name.Contains("Test"))
    }
但你真的不能做这样的事情
let christmasPredicate = fun (x:Catalog.ServiceTypes.Title) -> x.Name.Contains("Christmas")
let testQuery = query {
        for number in netflix.Titles do
        where christmasPredicate 
    }
当然F#允许这样的可组合性,所以你可以重用一个谓词?如果我想在特定日期之前将圣诞节标题与另一个谓词结合起来怎么办?我必须复制并粘贴我的整个查询?C#与此完全不同,有几种方法可以构建和组合谓词
查询
var q = from elem in collection
        where someCondition(elem)
        select elem;
翻译成
var q = collection.Where(elem => someCondition(elem));
是否有LINQ语法可以转换为以下内容?
var q = collection.Where((elem, index) => someCondition(elem, index));
下面是两个返回相同数据的查询.除了风格,我不确定哪个更好.
哪些因素会影响这些查询?使用一种风格而不是另一种风格有什么好处?
样品1
var x = from s in db.Surveys
    join sq in db.Survey_Questions on s.ID equals sq.Survey_ID
    join q in db.Questions on sq.Question_ID equals q.ID
    join qg in db.Question_Groups on q.ID equals qg.Question_ID
    where s.Type_ID.Equals(typeID) & s.Type.Equals(type)
    select new { question = sq.Question, status = sq.Status, grp = qg };
样本2
var x = db.Surveys.Where(s => s.Type_ID.Equals(typeID) & s.Type.Equals(type))
              .Join(db.Survey_Questions,
                        s => s.ID,
                        sq => sq.Survey_ID,
                        (s, sq) => new
                        {
                            question = sq.Question,
                            status = sq.Status
                        })
              .Join(db.Question_Groups, …我一直在寻找类似MongoDb(http://docs.mongodb.org/manual/applications/read/#find,docs.mongodb.org/manual/reference/operators/)查询表达式对象评估函数的实现或者一类.它可能不包括所有高级功能,并且应该具有可扩展的体系结构.
类似MongoDB的查询表达式对象易于理解和使用,提供编写干净,自解释代码的能力,因为要搜索的查询和对象都是关联数组.
基本上说它是一个方便的功能,从PHP数组中提取信息.知道了数组结构(arrayPath),它将允许对多维数组数据执行操作,而不需要多个嵌套循环.
如果您不熟悉MongoDb,请查看给定的表达式对象和数组以进行搜索.
为简单起见,我把它写成JSON字符串.对象内容毫无意义,只需显示MongoDb查询语法即可.
{
    "name": "Mongo",
    "type": "db",
    "arch": {
        "$in": [
            "x86",
            "x64"
        ]
    },
    "version": {
        "$gte": 22
    },
    "released": {
        "$or": {
            "$lt": 2013,
            "$gt": 2012
        }
    }
}
[
    {
        "name": "Mongo",
        "type": "db",
        "release": {
            "arch": "x86",
            "version": 22,
            "year": 2012
        }
    },
    {
        "name": "Mongo",
        "type": "db",
        "release": {
            "arch": "x64",
            "version": 21,
            "year": 2012
        }
    },
    {
        "name": "Mongo",
        "type": …php if-statement multidimensional-array query-expressions mongodb
我正在使用Condition表达式,但我无法为a添加多个条件FilterExpression.任何人都可以帮忙吗?我在这里发布了我的源代码.
带过滤器的ConditionExpression:
  // Filter1
FilterExpression filter1 = new FilterExpression();
filter1.FilterOperator = LogicalOperator.And;
filter1.Conditions.Add(new ConditionExpression("A_LogicalName", ConditionOperator.Equal, id1));
filter1.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id2));
query.Criteria.Filters.Add(filter1);
// Filter2
FilterExpression filter2 = new FilterExpression();
filter2.FilterOperator = LogicalOperator.And;
filter2.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id3));
filter2.Conditions.Add(new ConditionExpression("C_LogicalName", ConditionOperator.Equal, id4));
q_ShoppingCartItemQuantityCheck.Criteria.Filters.Add(filter2);  
我们发现Linq for CRM 2011非常糟糕 - 它似乎没有在其上执行任何QA.作为如何严重破提供商的指示器是像.凡(X => X =="B")的查询工作,但此.凡(X =>"B" == X)可能不依赖于像前述一些条件加入声明.我实际上不得不重写查询提供程序的一部分,并享受我放在一起的废话更好的运气.
然而,这还不能继续,还有其他问题,我没有为MS工作而付钱,所以我正在寻找其他选择.这两个问题出现在QueryExpression&FetchXml中,如下所示:http://msdn.microsoft.com/en-us/library/gg334607.aspx
任何人都可以给我一个诚实的,现实生活中使用QueryExpression与FetchXml的利弊吗?我想知道他们在性能,开发速度,稳健性和灵活性方面的比较.
如何执行类似于SQL IN查询的查询表达式?
我试图沿着这些方向做点什么:
let customerNumbers = set ["12345"; "23456"; "3456"]
let customerQuery = query {
    for c in dataContext.Customers do
    where(customerNumbers.Contains(c.CustomerNumber))
    select c
}
但我收到一个错误:
System.NotSupportedException: Method 'Boolean Contains(System.String)' has no supported translation to SQL.
在http://msdn.microsoft.com/en-us/library/hh225374.aspx上查看查询表达式的文档我应该对contains部分使用另一个查询,但是这段代码不起作用,示例被破坏了:
// Select students where studentID is one of a given list.
let idQuery = query { for id in [1; 2; 5; 10] do select id }
query { 
    for student in db.Student do
    where (idQuery.Contains(student.StudentID))
    select student
}
idQuery确实不包含任何"Contains"方法.
我也尝试过:
let …我正在使用System.Data.SQLite,我正在尝试检索由下面的查询表达式生成的SQL字符串.查询正确执行,但SQL字符串是SELECT NULL AS [EMPTY].
似乎GetCommand().CommandText不支持,但如果是这样,还有什么可以访问生成的SQL字符串?
[<Test>]
member this.showSQL() =
    let connectionString = sprintf @"Data Source=%s;UTF8Encoding=True;Version=3" dbFilename
    let connection = new SQLiteConnection(connectionString)
    use dc = new DataContext(connection)
    let channelMap = dc.GetTable<ChannelData>()
    let map = query {
        for row in channelMap do
        where (row.ChannelId = 1)
        select (row.ChannelId, row.Data0, row.State) }
    let cmd = dc.GetCommand(map).CommandText;
    printf "SQL: %s" cmd
我有一个用例,需要使用dynamo db查询表达式以编程方式查询dynamo db。假设A和B有两个属性,我想要一个类似的过滤器表达式(A='Test' OR A ='Test1') and B='test2'。
我搜索与此相关,但找不到有用的资源。我是dynamo db的新手。