<p>Is there a better way to do this?</p>

<pre><code>string[] s = {"zero", "one", "two", "three", "four", "five"};

var x = 
s
.Select((a,i) =&gt; new {Value = a, Index = i})
.Where(b =&gt; b.Value.StartsWith("t"))
.Select(c =&gt; c.Index);
</code></pre>

<p>i.e. I'm looking for a more efficient or more elegant way to get the positions of the items matching the criteria.</p>

Seems fine to me. You might save a couple characters by changing the select to:
```
```
.Select((Value, Index) => new {Value, Index})
```
```