Como você pode lidar com uma subconsulta IN com o LINQ to SQL?

Estou um pouco preso nisso. Basicamente eu quero fazer algo parecido com a seguinte consulta SQL no LINQ to SQL:

SELECT f.* FROM Foo f WHERE f.FooId IN ( SELECT fb.FooId FROM FooBar fb WHERE fb.BarId = 1000 ) 

Qualquer ajuda será muito bem recebida.

Obrigado.

Dê uma olhada neste artigo . Basicamente, se você deseja obter o equivalente a IN, primeiro é necessário construir uma consulta interna e, em seguida, usar o método Contains (). Aqui está minha tentativa de traduzir:

 var innerQuery = from fb in FoorBar where fb.BarId = 1000 select fb.FooId; var result = from f in Foo where innerQuery.Contains(f.FooId) select f; 

Modo geral de implementar IN no LINQ to SQL

 var q = from t1 in table1 let t2s = from t2 in table2 where  select t2.KeyField where t2s.Contains(t1.KeyField) select t1; 

Maneira geral de implementar EXISTS no LINQ to SQL

 var q = from t1 in table1 let t2s = from t2 in table2 where  select t2.KeyField where t2s.Any(t1.KeyField) select t1; 
 from f in Foo where f.FooID == ( FROM fb in FooBar WHERE fb.BarID == 1000 select fb.FooID ) select f; 

Tente usar duas etapas separadas:

 // create a Dictionary / Set / Collection fids first var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID); from f in Foo where fids.HasKey(f.FooId) select f 

// cria um dictionary / conjunto / coleção fids primeiro

Encontre outras Artilces

 var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID); from f in Foo where fids.HasKey(f.FooId) select f 

Tente isso

 var fooids = from fb in foobar where fb.BarId=1000 select fb.fooID var ff = from f in foo where f.FooID = fooids select f 
 var foos = Foo.Where
( f => FooBar.Where(fb.BarId == 1000).Select(fb => fb.FooId).Contains(f.FooId));
 from f in foo where f.FooID equals model.FooBar.SingleOrDefault(fBar => fBar.barID = 1000).FooID select new { f.Columns }; 

// cria um dictionary / conjunto / coleção fids primeiro

Encontre outras Artilces

 var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID); from f in Foo where fids.HasKey(f.FooId) select f