Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 16456|Respuesta: 0

[ASP.NET] Explica el retorno del conjunto de resultados de la tabla de consultas federada de Linq

[Copiar enlace]
Publicado en 8/5/2015 16:34:23 | | |

En este artículo, el autor presenta en detalle la consulta conjunta de Linq, porque me temo que los lectores no entienden bien este aspecto, así que antes de hablar de la consulta conjunta de Linq, primero te daré algunos conocimientos y luego hablaré de cómo se implementa la consulta conjunta de Linq, con la esperanza de ayudarte.

Primero, vamos a entender algunos puntos de conocimiento sobre la consulta conjunta de Linq.

1. Tipo de entrega anónima



vacío estático Main(string[] args)   
{ var User = GetAnonymous(). Cast(new { UserName = "", LastLoginIp = "" });           
   Console.Write(Usuario.NombreDeUsuario);      
}         
objeto estático GetAnonymous()     
{ var User = new { UserName = "yaosansi", LastLoginIp = "127.0.0.1" };         
      devolver Usuario;     
}
Cuando definimos un tipo anónimo, solo puede pasarse a través del tipo objeto, y el compilador no conocerá el tipo real del tipo anónimo tras el paso.

Esta línea puede ser fundida mediante el método de extensión Cast. A continuación se muestra un prototipo del método Molde.



T Cast estático público (este objeto o, T t)      
{            
   retorno ();         
}
2. ¿Cómo generar una lista de tipos anónima para una consulta federada de Linq?        



var User = GetAnonymous(). Cast(new { UserName = "", LastLoginIp = "" });         
var list = nueva lista< ?>();
El principio es el mismo que el anterior.



var User = nuevo   
{     
   UserName = "yaosansi", LastLoginIp = "127.0.0.1"
};              
var list = User.MakeList();         
lista. Añadir (usuario);            
Console.Write(list[0]. Nombre de usuario);
Echemos un vistazo al método MakeList():



public static List MakeList(this T t) {            
    volver a nueva Lista();      
}
Por supuesto, puede que pienses que el método anterior no es lo suficientemente perfecto y necesitas añadir un Usuario a la lista, así que tienes el siguiente método:      



Lista pública estática MakeList (este T t, params T[] elementos)         
{            
   devolver nueva Lista(elementos);   
}  
Cuando se llama, puede escribirse como:



var User = nuevo   
{   
  UserName = "yaosansi", LastLoginIp = "127.0.0.1"   
};              
var list = User.MakeList(User);         
Console.Write(list[0]. Nombre de usuario);   
Esta vez, vayamos al grano y entendamos cómo se implementa la consulta federada de Linq.



var q = de p en db. Productos     
donde p.Supplier.Country == "USA" & & p.UnitsInStock == 0   
selecciona p;
La consulta anterior son dos tablas relacionadas, y solo se devuelve el contenido de una tabla; en este caso, se puede devolver una Lista fuertemente tipada en la capa de datos. Por ejemplo:



Lista pública SelectProducts()   
{ var q = de p en db. Productos     
       donde p.Supplier.Country == "USA" & & p.UnitsInStock == 0        
       selecciona p;        
       volver q.ToList;   
}
Si el conjunto de resultados devuelto es mayor de dos tablas, ¿cómo debería pasarse? Debes haber pensado que si el conjunto de resultados que se devuelve es una sola línea de datos, podemos usar el tipo de entrega anónima que mencionamos antes para obtener los resultados que necesitamos. Objeto público



objeto público SelectProducts()  
{ var q = de p en db. Productos      
       donde p.Supplier.Country == "USA" & & p.UnitsInStock == 0        
       select new {p.UnitsInStock,p.Supplier.Sid};      resultado var = q.Single();  
       resultado de retorno;   
}
Sin embargo, esta premisa es que la capa de lógica de negocio necesita conocer los tipos específicos de tipos de anonimato en la capa de datos. Esta superposición tiene poca importancia. Esto no es lo que queremos. Además, el método de usar el tipo anónimo List para devolver el conjunto de resultados de datos de varias filas también falló tras los experimentos. Esto significa que ninguno de los dos métodos para pasar el anonimato al principio de este artículo funcionará.

Método 1: La consulta federada de Linq personaliza las clases con la misma estructura que el tipo de retorno



clase pública CustomQuery      
{ uint público UnitsInStock   
   { get; set; }            
  public int Sid   
   { get; set; }        
}
Esto puede resolverse cuando los resultados de la consulta son un conjunto de resultados de varias tablas. Como necesitas saber el tipo de anonimato devuelto, necesitas definir una clase adicional además de no ajustarse a la multicapa. Pero esto es cierto y puede devolver los resultados que necesitamos usando tipos fuertes.

Método 2: Consulta federada de Linq usando delegación System.Func (Referencia: Devolver var de un método en C# 3.0)

Capa de datos:



Publico IEnumerable GetCustomersWithOrders(Func,
TProyección> proyección)   
{ devolución del cliente en _customers           
     sea customerOrders = de un pedido en _orders                                
     donde el orden. CustomerID = customer.ID            
     proyección selecta (cliente, clientesPedidos);  
}
Capa de lógica de negocio:



resultados var = GetCustomersWithOrders(  
(cliente, pedidos) => nuevo   
{ Nombre = cliente. Nombre,               
     OrderCount = pedidos. Count()        
});
El resultado devuelto de esta manera sigue siendo un tipo verdaderamente anónimo en la capa de lógica de negocio y puede usarse directamente.

Método 3: Las consultas federadas de Linq utilizan procedimientos almacenados o vistas.




Anterior:LINQ obtiene un problema de retorno de valor de procedimiento almacenado en mi procedimiento almacenado
Próximo:Microsoft abandonó IE y estaba decidida a hacer 220.000 líneas de código
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com