Compartir a través de


Cómo: Formular proyecciones (LINQ to SQL)

En los ejemplos siguientes se muestra cómo la instrucción select en C# y la instrucción Select en Visual Basic se puede combinar con otras características para formar proyecciones de consulta.

Ejemplo

En el ejemplo siguiente se utiliza la cláusula Select de Visual Basic (cláusula select en C#) para devolver una secuencia de nombres de contacto de Customers.

Dim nameQuery = From cust In db.Customers _
    Select cust.ContactName
var nameQuery =
    from cust in db.Customers
    select cust.ContactName;

En el ejemplo siguiente se utilizan la cláusula Select de Visual Basic (cláusula select en C#) y tipos anónimos para devolver una secuencia de nombres de contacto y números de teléfono de Customers.

Dim infoQuery = From cust In db.Customers _
    Select cust.ContactName, cust.Phone
var infoQuery =
    from cust in db.Customers
    select new { cust.ContactName, cust.Phone };

En el ejemplo siguiente se utilizan la cláusula Select de Visual Basic (cláusula select en C#) y tipos anónimos para devolver una secuencia de nombres de contacto y números de teléfono de empleados. Los campos FirstName y LastName se combinan en un campo único (Name) y se cambia el nombre del campo HomePhone a Phone en la secuencia resultante.

Dim info2Query = From emp In db.Employees _
    Select Name = emp.FirstName & " " & emp.LastName, _
Phone = emp.HomePhone
var info2Query =
    from emp in db.Employees
    select new
    {
        Name = emp.FirstName + " " + emp.LastName,
        Phone = emp.HomePhone
    };

En el ejemplo siguiente se utiliza la cláusula Select de Visual Basic (cláusula select en C#) y tipos anónimos para devolver una secuencia de todos los ProductID y un valor calculado denominado HalfPrice. Este valor se establece en UnitPrice dividido entre 2.

Dim specialQuery = From prod In db.Products _
    Select prod.ProductID, HalfPrice = CDec(prod.UnitPrice) / 2
var specialQuery =
    from prod in db.Products
    select new { prod.ProductID, HalfPrice = prod.UnitPrice / 2 };

En el ejemplo siguiente se utiliza la cláusula Select de Visual Basic (cláusula select en C#) y una instrucción condicional para devolver una secuencia de nombre de producto y disponibilidad de producto.

Dim prodQuery = From prod In db.Products _
Select prod.ProductName, Availability = _
    If(prod.UnitsInStock - prod.UnitsOnOrder < 0, _
    "Out Of Stock", "In Stock")
var prodQuery =
    from prod in db.Products
    select new
    {
        prod.ProductName,
        Availability =
            prod.UnitsInStock - prod.UnitsOnOrder < 0
        ? "Out Of Stock" : "In Stock"
    };

En el ejemplo siguiente se utiliza la cláusula Select de Visual Basic (cláusula select en C#) y un tipo conocido (Name) para devolver una secuencia de nombres de empleados.

Public Class Name
    Public FirstName As String
    Public LastName As String
End Class

Dim db As New Northwnd("c:\northwnd.mdf")
Dim empQuery = From emp In db.Employees _
    Select New Name With {.FirstName = emp.FirstName, .LastName = _
        emp.LastName}
public class Name
{
    public string FirstName = "";
    public string LastName = "";
}

 void empMethod()
 {
 Northwnd db = new Northwnd(@"c:\northwnd.mdf");
 var empQuery =
     from emp in db.Employees
     select new Name
     {
         FirstName = emp.FirstName,
         LastName = emp.LastName
     };
}

En el ejemplo siguiente se utilizan las cláusulas Select y Where de Visual Basic (select y where en C#) para devolver una secuencia filtrada de los nombres de contacto de los clientes de Londres.

Dim contactQuery = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust.ContactName
var contactQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust.ContactName;

En el ejemplo siguiente se utilizan una cláusula Select de Visual Basic (cláusula select en C#) y tipos anónimos para devolver un subconjunto con forma de los datos de clientes.

Dim custQuery = From cust In db.Customers _
    Select cust.CustomerID, CompanyInfo = New With {cust.CompanyName, _
        cust.City, cust.Country}, ContactInfo = _
        New With {cust.ContactName, cust.ContactTitle}
var custQuery =
    from cust in db.Customers
    select new
    {
        cust.CustomerID,
        CompanyInfo = new { cust.CompanyName, cust.City, cust.Country },
        ContactInfo = new { cust.ContactName, cust.ContactTitle }
    };

En el ejemplo siguiente se utilizan consultas anidadas para devolver estos resultados:

  • Una secuencia de todos los pedidos y sus OrderID correspondientes.

  • Una subsecuencia de los elementos del pedido que tienen descuento.

  • La cantidad de dinero que se ahorra si no se incluye el envío en el precio.

Dim ordQuery = From ord In db.Orders _
    Select ord.OrderID, DiscountedProducts = _
    (From od In ord.OrderDetails _
        Where od.Discount > 0.0 _
    Select od), _
FreeShippingDiscount = ord.Freight
var ordQuery =
    from ord in db.Orders
    select new
    {
        ord.OrderID,
        DiscountedProducts =
            from od in ord.OrderDetails
            where od.Discount > 0.0
            select od,
        FreeShippingDiscount = ord.Freight
    };

Vea también

Otros recursos

Ejemplos de consultas (LINQ to SQL)