Udostępnij za pośrednictwem


How to: Filter Data

This topic shows how to filter query results. The example returns a collection of SalesOrderHeader objects that represents all online orders more than $2,500. The same example is shown using the following Entity Framework query technologies:

  • LINQ to Entities

  • Entity SQL with ObjectQuery<T>

  • Query builder methods of ObjectQuery<T>

The example in this topic is based on the Adventure Works Sales Model. To run the code in this topic, you must have already added the Adventure Works Sales Model to your project and configured your project to use the Entity Framework. For more information, see How to: Use the Entity Data Model Wizard (Entity Framework) or How to: Manually Configure an Entity Framework Project and How to: Manually Define an Entity Data Model (Entity Framework).

Example

The following is the LINQ to Entities example.

Using context As New AdventureWorksEntities()
    ' Specify the order amount. 
    Dim orderCost As Integer = 2500

    ' Define a LINQ query that returns only online orders 
    ' more than the specified amount. 
    Dim onlineOrders = From order In context.SalesOrderHeaders _
        Where order.OnlineOrderFlag = True AndAlso order.TotalDue > orderCost _
        Select order

    ' Print order information. 
    For Each onlineOrder In onlineOrders
        Console.WriteLine("Order ID: {0} Order date: ", onlineOrder.SalesOrderID)
        Console.WriteLine("Order date: {0:d}", onlineOrder.OrderDate)
        Console.WriteLine("Order number: {0}", onlineOrder.SalesOrderNumber)
    Next
End Using
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Specify the order amount.
    int orderCost = 2500;

    // Define a LINQ query that returns only online orders
    // more than the specified amount.
    var onlineOrders =
        from order in context.SalesOrderHeaders
        where order.OnlineOrderFlag == true &&
        order.TotalDue > orderCost
        select order;

    // Print order information.
    foreach (var onlineOrder in onlineOrders)
    {
        Console.WriteLine("Order ID: {0} Order date: "
            + "{1:d} Order number: {2}",
            onlineOrder.SalesOrderID,
            onlineOrder.OrderDate,
            onlineOrder.SalesOrderNumber);
    }
}

The following is the Entity SQL example.

Using context As New AdventureWorksEntities()
    ' Specify the order amount. 
    Dim orderCost As Decimal = 2500

    ' Specify the Entity SQL query that returns only online orders 
    ' more than the specified amount. 
    Dim queryString As String = "SELECT VALUE o FROM AdventureWorksEntities.SalesOrderHeaders AS o " & _
                                " WHERE o.OnlineOrderFlag = TRUE AND o.TotalDue > @ordercost"

    ' Define an ObjectQuery and pass the maxOrderCost parameter. 
    Dim onlineOrders As New ObjectQuery(Of SalesOrderHeader)(queryString, context)
    onlineOrders.Parameters.Add(New ObjectParameter("ordercost", orderCost))

    ' Print order information. 
    For Each onlineOrder In onlineOrders
        Console.WriteLine("Order ID: {0} Order date: {1:d} Order number: {2}", _
                          onlineOrder.SalesOrderID, onlineOrder.OrderDate, onlineOrder.SalesOrderNumber)
    Next
End Using
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Specify the order amount.
    decimal orderCost = 2500;

    // Specify the Entity SQL query that returns only online orders
    // more than the specified amount.
    string queryString = @"SELECT VALUE o FROM AdventureWorksEntities.SalesOrderHeaders AS o 
        WHERE o.OnlineOrderFlag = TRUE AND o.TotalDue > @ordercost";

    // Define an ObjectQuery and pass the maxOrderCost parameter.
    ObjectQuery<SalesOrderHeader> onlineOrders =
        new ObjectQuery<SalesOrderHeader>(queryString, context);
    onlineOrders.Parameters.Add(
        new ObjectParameter("ordercost", orderCost));

    // Print order information.
    foreach (var onlineOrder in onlineOrders)
    {
        Console.WriteLine("Order ID: {0} Order date: "
            + "{1:d} Order number: {2}",
            onlineOrder.SalesOrderID,
            onlineOrder.OrderDate,
            onlineOrder.SalesOrderNumber);
    }
}

The following is the query builder method example.

Using context As New AdventureWorksEntities()
    ' Specify the order amount. 
    Dim orderCost As Integer = 2500

    ' Define an ObjectQuery that returns only online orders 
    ' more than the specified amount. 
    Dim onlineOrders As ObjectQuery(Of SalesOrderHeader) = _
        context.SalesOrderHeaders.Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost", _
                                        New ObjectParameter("ordercost", orderCost))

    ' Print order information. 
    For Each onlineOrder In onlineOrders
        Console.WriteLine("Order ID: {0} Order date: {1:d} Order number: {2}", _
                          onlineOrder.SalesOrderID, onlineOrder.OrderDate, onlineOrder.SalesOrderNumber)
    Next
End Using
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Specify the order amount.
    int orderCost = 2500;

    // Define an ObjectQuery that returns only online orders 
    // more than the specified amount.
    ObjectQuery<SalesOrderHeader> onlineOrders =
        context.SalesOrderHeaders
        .Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost",
        new ObjectParameter("ordercost", orderCost));

    // Print order information.
    foreach (var onlineOrder in onlineOrders)
    {
        Console.WriteLine("Order ID: {0} Order date: "
           + "{1:d} Order number: {2}",
           onlineOrder.SalesOrderID,
           onlineOrder.OrderDate,
           onlineOrder.SalesOrderNumber);
    }
}