# Conditional in Ecto.query

**URL:** <https://forum.elixirforum.com/t/conditional-in-ecto-query/17541>\
**Category:** Questions\
**Tags:** ecto, ecto-query, pipe-operator\
**Created:** [October 26, 2018, 10:07am UTC](https://forum.elixirforum.com/t/conditional-in-ecto-query/17541 "2018-10-26T10:07:08Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![OvermindDL1](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/overminddl1/32/2677_2.png) [@OvermindDL1](https://forum.elixirforum.com/u/OvermindDL1)\
**Post date:** [October 26, 2018, 3:42pm UTC](https://forum.elixirforum.com/t/conditional-in-ecto-query/17541/3 "2018-10-26T15:42:00Z")

</div>

Yep, this is a pattern I use _super_ often. I keep meaning to find a way to pipeline it better, but I just tend to have long repeated sets of this small ‘mutation’ chunks (copy/pasted from my sources):

```elixir
    query =
      case refine do
        [pidm: pidm] when is_integer(pidm) -> where(query, [s], s.spriden_pidm == ^pidm)
        [pidm: pidms] when is_list(pidms) -> where(query, [s], s.spriden_pidm in ^pidms)
        [cnum: cnum] when is_binary(cnum) -> where(query, [s], s.spriden_id == ^cnum)
        [cnum: cnums] when is_list(cnums) -> where(query, [s], s.spriden_id in ^cnums)
        [id: id] when is_binary(id) -> where(query, [s], s.spriden_id == ^id)
        [id: ids] when is_list(ids) -> where(query, [s], s.spriden_id in ^ids)
        [] -> query
      end

```

Obviously I don’t use the formatter because it absolutely _destroys_ the readability of these… I wish it could be fixed… ☹

---

_[View the full topic](https://forum.elixirforum.com/t/conditional-in-ecto-query/17541)._
