---
title: "Basic"
description: "Guide to performing basic read-only queries and configuring query policies with Filter Expressions in Aerospike C#."
---

# Basic

> For the complete documentation index see: [llms.txt](https://aerospike.com/docs/llms.txt)
> 
> All documentation pages available in markdown.

This page describes basic queries and how to create a new query policy.

## Basic queries

Basic queries are read-only queries that return records to the client. A client application makes an API request to start a read-only query. This request in turn initiates parallel requests to each node in the cluster. The result returns the current version of each record to the client.

## Policies

The concept of short and long queries was introduced in Database 6.0. See [Differences between short and long queries](https://aerospike.com/docs/develop/learn/queries#differences-between-short-and-long-queries) for more information.

Query policies can be passed on a per-request basis. Policy values can be set to create a [filter expression](https://aerospike.com/docs/develop/expressions/#record-filtering-with-expressions), to determine whether bin data is included with the response, identify a short versus long query, and more.

::: note
Unless supported by query policies, basic queries are not supported on prefer-rack namespaces.
:::

The following example creates a new query policy that defines a Filter Expression that compares the length of the `shape` list in the `report` map and returns `true` if greater than `2`.

```csharp
// Create a query policy with Filter Expression

QueryPolicy queryPolicy = new QueryPolicy();

queryPolicy.filterExp = Exp.Build(

    Exp.GT

        ListExp.Size(

            MapExp.GetByKey(

                MapReturnType.VALUE,

                Exp.Type.LIST,

                Exp.Val("shape"),

                Exp.MapBin("report"))

        ),

        Exp.Val(2)

    )

);
```