The way I would get the results that you want would look something like this:
tempTable.Rows.Cast<DataRow>()
    .Select(dr => Convert.ToString(dr[0]))
    .GroupBy(dr => dr)
    .Select(g => new { Title = g.Key, Count = g.Count() });
However, it's actually looping under the hood. In fact, I can't think of a way to do that kind of a grouping without inspecting each record.
The drawback is that the result of that expression is a sequence of anonymous type instances. If you still want the result to be a DataView, you could rewrite the last Select to create a new DataRow with two columns, and shove them into a new DataTable which you pass to the DataView.