LINQ por defecto utiliza la consulta diferida. Cuando «navegamos» entre las clases de un LINQ to SQL (.dbml) éste en background va generando las consultas y de este modo nos ahorramos consultas inutiles.
El problema viene cuando queramos devolver una clase que forma parte de un .dbml como resultado de un método marcado como [OperationContract].
Es necesario modificar el comportamiento por defecto de consulta diferida a una consulta forzada. Ejemplo:
PluginInstanceDataContext pluginsContext = new PluginInstanceDataContext();
var orderloadOption = new System.Data.Linq.DataLoadOptions();
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith(p => p.PluginParametro);
dlo.LoadWith(p => p.PluginTipoControl);
pluginsContext.LoadOptions = dlo;
var consulta = from plugins in pluginsContext.Plugin
where plugins.IdCentro == idCentro
select plugins;
Sino lo hacemos así nos encontraremos que las «clases hijas» no contienen datos.