当前位置: 首页 > 面试题库 >

使用F#3.0的动态SQL查询?

苗征
2023-03-14
问题内容

我曾尝试使用FLINQ,但F#3.0 beta版已经过时了。

有人可以给我一些关于如何在F#中创建动态SQL查询的指示吗?


问题答案:

在F#3.0中,查询会自动加引号,因此您不能使用引号拼接(<@ foo %bar @>语法)来构成查询。通过使用拼接来组成查询,您可以编写的大多数内容仍可以通过“常规LINQ方式”来完成,方法是从先前的源创建一个新查询并添加即过滤:

// Initial query that simply selects products
let q1 = 
  query { for p in ctx.Products do 
          select p }

// Create a new query that specifies only expensive products
let q2 = 
  query { for p in q1 do
          where (p.UnitPrice.Value > 100.0M) }

这样,您可以动态添加条件,动态指定投影(使用select)和执行其他几个查询组合。但是,您没有像使用显式引号那样完全灵活地编写查询。我想这是F#3.0必须为类似于C#中存在的简单语法付出的代价。

原则上,您应该能够使用query.Select(etc.)运算符显式编写查询。这将使用显式引号编写,因此您应该能够使用拼接。但是,我不完全了解翻译的工作原理,因此无法给您提供工作样本。这样的事情应该可以工作(但是语法非常丑陋,所以最好只使用字符串或其他一些技巧):

<@ query.Select(Linq.QuerySource<_, _>(ctx.Products), fun prod -> 
     // You could use splicing here, for example, if 'projection' is
     // a quotation that specifies the projection, you could write:
     //   %projection
     prod.ProductName) @>
|> query.Run

F#3.0中的查询基于IQueryable,因此可以使用与我为C#实现的技巧相同的技巧。但是,我想某些细节可能会有所不同,因此我不希望这会立即生效。该想法的最佳实现是在LINQKit中,但我认为它不能直接在F#中工作。

因此,总的来说,我认为唯一可行的情况就是第一个示例-您只需通过编写多个查询就可以将其他查询运算符应用于查询。



 类似资料:
  • 我正在为spring批处理使用java配置(spring boot)。我有一个员工Id列表,对于每个Id,我需要运行一个查询(如下所示),然后处理数据。 我知道我们可以使用阅读器。setPreparedStatementSetter动态设置上述SQL中的参数。但是,我不确定如何对列表中的每个员工id重复批处理过程。即使我将reader()标记为@StepScope,也只会调用一次reader。(即

  • 我有一个这样的SQL问题 根据用户输入,我想将botcode='r1'更改为给定输入。在不重新启动作业的情况下说出botcode='r10'。有没有办法做到这一点。我在flink 1.7上使用stream env。我尝试配置流来读取输入。但仍停留在如何动态更改查询上。有人能帮我吗?提前谢谢

  • 问题内容: 问题答案: 这是从MySQL数据库知识库中获得的: LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT接受一个或两个数字参数,这两个参数都必须是非负整数常量(使用预处理语句时除外)。 为了使查询正常工作,您需要将其编写为 准备好的语句 ,然后执行该 语句 。

  • 问题内容: 我知道这个话题无处不在,但我无法使其正常运行。这可能很简单。 这是基本查询后的数据示例: 我想要的是列名称是动态的: 到目前为止,根据我的研究,这是我整理的代码: 当我运行查询时,出现语法错误。 问题答案: 使用动态SQL 结果

  • 问题内容: 假设我有一个存储在这样的变量中的查询(它实际上是动态填充的,并且更复杂,但这是出于演示目的): 有没有一种方法可以检查查询是否返回任何结果?像这样的东西,但这是行不通的: 我能想到的唯一方法是将结果放入临时表中,然后从中进行查询,但这并不理想,因为动态查询中的列可以变化,而且我真的不需要临时表除了检查是否会返回某些行外,完全出于其他原因。有没有更好的办法? 问题答案: 尝试执行和用于查

  • 问题内容: 我正在尝试获取等于的所有条目,但是它什么也不返回。 我在这里做错了什么?而且,以我尝试的方式查询数据的正确方法是什么? JSON: 迅速: 问题答案: 您需要使用to,而不是使用equalTo