When using LINQ to SQL, it lets you retrieve entity lists as results from SQL queries. While that’s usually what you would like to retrieve from LINQ query, LINQ to SQL also provides an alternative to retrieve a raw IDbCommand statement with the SQL command and all parameters set based on the query expression.
This means that you can actually bypass the Entity list generation and use the query for other purposes like generating a DataReader instead:
var q = from c in db.tt_customers
where c.Pk > 5
IDbCommand command = db.GetCommand(q);
command.Connection = Customer.context.Connection;
IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
this.dgGrid.DataSource = reader;