Accepted answer

Your query is enumerating (indirectly) through the rows in the table. As you should already know, you cannot modify a collection (remove something in this case) as you enumerate over it. Throw the contents into a list beforehand. That way you're not enumerating through the actual table but a copy of some rows.

var query = (from row in errorDataSet.Tables[0].AsEnumerable()
             where !String.IsNullOrEmpty(row.Field<string>("Message"))
             select row).ToList();

Related Query