Cuando añades una partial class a una clase "Linq to SQL" de LINQ tienes todos los números que en un momento u otro acabe saliendo un error "'MSLinqToSQLGenerator' failed. Unspecified error" ¡incluso aunque tengas instalado el SP1 de Visual Studio 2008!. Gracias a
éste enlace pude solucionar el problema.
1º paso: los using debe estar dentro del "namespace". Es decir de esto:
using System.Linq;
using System.Collections.Generic;
using System.Data;
namespace SIRAMcenter.Datos.Plugins
{
partial class PluginInstanceDataContext
{
public IEnumerable<string> GetNombreClasePluginsNoIControl(int idCentro)
debes pasar a esto:
namespace SIRAMcenter.Datos.Plugins
{
using System.Linq;
using System.Collections.Generic;
using System.Data;
partial class PluginInstanceDataContext
{
public IEnumerable<string> GetNombreClasePluginsNoIControl(int idCentro)
{
2º paso: Ejecutar explicitamente la herramienta personalizada(MSLinqToSQLGenerator) de nuevo:
3ºpaso: limpia el proyecto y vuelve a compilar.
Etiquetas: .NET, LINQ, programacion
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.
Etiquetas: .NET, LINQ, programacion, WCF
Si quieres hacer algo como esto en LINQ:
var query =
db.Customers.
Where("City = @0 and Orders.Count >= @1", "London", 10).
OrderBy("CompanyName").
Select("new(CompanyName as Name, Phone)");
lo llevas claro... ya que .NET no permite realizar LINQ dinámico. Para solucionarlo existe una libreria que añadiendola a tu proyecto podras hacer cosas como la del ejemplo.
Para descargar la libreria y unos ejemplos
éste es el enlace o
este.
ArtÃculo original:
Dynamic LINQ(Parte 1: Usando la librerÃa de LINQ Dynamic)Etiquetas: .NET, LINQ, programacion
En esta
dirección podeis encontrar una lista de artÃculos muy interesantes sobre cómo diseñar consultas LINQ.
Etiquetas: LINQ