# Execute

> Execute a SearchEXpression givent a certain SearchContext Depending on flags the expression might be valuated in a worker thread (by default) or in the main thread. It returns a an enumerable list of SearchItem.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor.Search](/engine/6000.5/script-reference/unityeditor/search.md)
* **Assembly:** UnityEditor

## Execute(SearchContext)

Execute a SearchEXpression givent a certain [SearchContext](/engine/6000.5/script-reference/unityeditor/search/searchcontext.md) Depending on flags the expression might be valuated in a worker thread (by default) or in the main thread. It returns a an enumerable list of [SearchItem](/engine/6000.5/script-reference/unityeditor/search/searchitem.md).

```csharp
public IEnumerable<SearchItem> Execute(SearchContext searchContext)
```

### Parameters

**** (\[SearchContext]\(/engine/6000.5/script-reference/unityeditor/search/searchcontext)): SearchContext used to initialize the SearchExpressionContext that will encapsulate all information relative to expression evaluation.

### Returns

| Type                                                                                                        | Description                               |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| [IEnumerable\<SearchItem>](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1) | Returns an enumerable list of SearchItem. |

### Examples

```csharp
[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)]
[SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)]
[Description("Extract and returns the X first results for each expression.")]
public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c)
{
    var argIndex = 0;
    var takeNumber = 1;
    if (c.args[0].types.HasFlag(SearchExpressionType.Number))
    {
        ++argIndex;
        takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0);
    }

    for ( ; argIndex < c.args.Length; ++argIndex)
    {
        var iterable = c.args[argIndex].Execute(c);
        var taken = 0;
        foreach (var item in iterable)
        {
            if (item == null)
                yield return null;
            else
            {
                yield return item;
                ++taken;
                if (taken == takeNumber)
                {
                    c.Break();
                    break;
                }
            }
        }
    }
}
```

## Execute(SearchExpressionContext)

Execute a SearchEXpression givent a certain [SearchContext](/engine/6000.5/script-reference/unityeditor/search/searchcontext.md) Depending on flags the expression might be valuated in a worker thread (by default) or in the main thread. It returns a an enumerable list of [SearchItem](/engine/6000.5/script-reference/unityeditor/search/searchitem.md).

```csharp
public IEnumerable<SearchItem> Execute(SearchExpressionContext c)
```

### Parameters

**** (\[SearchExpressionContext]\(/engine/6000.5/script-reference/unityeditor/search/searchexpressioncontext)): SearchExpressionContext that will encapsulate all information relative to expression evaluation.

### Returns

| Type                                                                                                        | Description                               |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| [IEnumerable\<SearchItem>](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1) | Returns an enumerable list of SearchItem. |

### Examples

```csharp
[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)]
[SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)]
[Description("Extract and returns the X first results for each expression.")]
public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c)
{
    var argIndex = 0;
    var takeNumber = 1;
    if (c.args[0].types.HasFlag(SearchExpressionType.Number))
    {
        ++argIndex;
        takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0);
    }

    for ( ; argIndex < c.args.Length; ++argIndex)
    {
        var iterable = c.args[argIndex].Execute(c);
        var taken = 0;
        foreach (var item in iterable)
        {
            if (item == null)
                yield return null;
            else
            {
                yield return item;
                ++taken;
                if (taken == takeNumber)
                {
                    c.Break();
                    break;
                }
            }
        }
    }
}
```
