Esto debería ser fácil, pero simplemente no puede resolverlo yo mismo, la interfaz no es lo suficientemente intuitiva ... :(Selección de todos los objetos secundarios en LINQ
Digamos que tengo una tabla State
, y Quiero seleccionar todos Counties
de múltiples States
en SQL sería:.
select c.*
from State s join County c on c.StateCode = s.StateCode
where s.TimeZone = -5 -- or some other criteria
El ejemplo anterior es bastante trivial para convertir a LINQ en un contexto estático:
var q = MyDataContext.GetTable<County>().Where(c => c.State.TimeZone = -5);
Pero donde empieza a ser complicado es si quiero una consulta más sensible al contexto, como las siguientes:
public static List<County> GetCountiesForStates(List<State> states) {
// gotta do something to return all the counties for all these states
}
Ahora podría hacer algo como esto dentro de ese método:
var q = MyDataContext.GetTable<County>().Where(c => states.Contains(c.State));
pero OMI eso es realmente poco elegante, porque (a) tengo que obtener un MyDataContext
estático en lugar de usar el contexto de datos implícitos de los objetos de Estado y (b) estás trabajando hacia atrás, y si comienzas a complicar aún más la consulta, se vuelve aún más feo.
¿Hay una manera de iniciar la consulta con:
var q = states... // or "from s in states..."
Instintivamente, yo quiero creer que puede hacer esto, pero todavía no he encontrado el camino ...
+1 para incluir la expansión lambda. –
Justo lo que quería, ¡GRACIAS! –
Sólo un pequeño error tipográfico: debería ser "countries.Where (c => c.Property) etc ... –