Not a LINQ answer, but a perfectly valid LINQ-to-SQL one:
var results = ctx.ExecuteQuery<Table1>(@"
select * from table1 where pkey1 in
(select pkey2 from table2 where column1='abc')").ToList();
You do not need to transfer control over each request to LINQ; indeed, in many cases, a well-written TSQL user query can be much more efficient than one generated from LINQ-to-SQL. Which is not criticism of LINQ-to-SQL (it does an excellent job with most simple queries, etc.).
source
share