 <p>Not sure how this should be done in query syntax, but here is the method syntax version:</p> <pre><code>this.Data = data .Split(new[] { "@" }, StringSplitOptions.RemoveEmptyEntries) .Select(table =&gt; table.Split(new[] { "^^" }, StringSplitOptions.RemoveEmptyEntries) .Select(row =&gt; row.Split(';')) .ToArray()) .ToArray(); </code></pre> <hr> <p>In query synax : </p> <pre><code>this.Data = ( from table in data.Split(new[] { "@" }, StringSplitOptions.RemoveEmptyEntries) select ( from row in table.Split(new[] { "^^" }, StringSplitOptions.RemoveEmptyEntries) select row.Split(';') ).ToArray() ).ToArray(); </code></pre>