在查询表达式中带有动态字段名称的通用可组合Ecto查询 [英] Generic composable Ecto query w/ dynamic field name in query expression

查看:79
本文介绍了在查询表达式中带有动态字段名称的通用可组合Ecto查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图允许传递字段名称并在Ecto查询表达式中动态运行它,如下所示:

I'm trying to allow for passing in a field name and running it in an Ecto query expression dynamically, like so:

def count_distinct(query, field_name) when is_binary(field_name) do
  query
  |> select([x], count(Map.fetch!(x, field_name), :distinct))
end

但是,出现此编译错误:

However, I get this compilation error:

(Ecto.Query.CompileError) `Map.fetch!(x, field_name)` is not a valid query expression

有什么方法可以做到这一点? / p>

Is there any way to accomplish this?

推荐答案

您需要使用 field / 2 可动态生成查询中的字段:

You need to use field/2 to dynamically generate fields in queries:

query
|> select([x], count(field(x, ^field_name), :distinct))

一个使用其他查询语法完成的示例:

An example using the other query syntax for completion:

from x in query,
  select: count(field(x, ^field_name), :distinct)

这篇关于在查询表达式中带有动态字段名称的通用可组合Ecto查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆