Q:

Performance of Related tables in calculated properties

Looking to see if there is a better way to do this.
I am using DB first and have a table called Items. Below is a calculated property that I specify on a partial class to extend it that uses related tables to derive the result. This technically works fine. I like the ease of using it, the fact that all this business logic is defined once in the domain, and that you can use complex code to derive the results.
The only issue I am concerned with is performance, when you pull back multiple records. Using SQL Profiler, I can see that if you pull back 50 rows of Item, it will execute an additional query to retrieve the Work Order Details in this case, 50 times! Not sure why it is not doing a join instead of doing 50 additional reads??? And I have more than one calculated property like this going out to multiple tables and each one is doing an explicit read per row = slow! 
The result from pulling back 50 rows from Item table, is 2,735 reads from the database as indicated by SQL Profiler!!! I am not that familiar with SQL Profiler so maybe I am mis-interpreting somthing, but I know it is doing a lot of DB reads.

Why doesn't it do a join instead of doing an explicit read to the related tables for each row in Items?
What is "Best Practice" to accomplish this? Is there a better way?

.
[Display(Name = "Qty Allocated")]
public decimal QtyAllocated
{
    get
    {
        if (this.TrackInventory)
        {
            var inProcessNonRemnantWorkOrderDetails = this.WorkOrderDetails.Where(wod =>
                    new[] 
                    {
                        (int)WorkOrderStatus.Created, 
                        (int)WorkOrderStatus.Released,
                        (int)WorkOrderStatus.InProcess
                    }.Contains(wod.WorkOrderHeader.StatusId)
                    && wod.EstimatedQuantity >= 1 //Don't count remnants as allocated
                    );

            var inProcessRemnantWorkOrderDetails = this.WorkOrderDetails.Where(wod =>
                    new[] 
                    {
                        (int)WorkOrderStatus.Created, 
                        (int)WorkOrderStatus.Released,
                        (int)WorkOrderStatus.InProcess
                    }.Contains(wod.WorkOrderHeader.StatusId)
                    && wod.EstimatedQuantity > 0 && wod.EstimatedQuantity < 1 //gets just remnants
                    );

            decimal qtyAllocated = 
                this.WorkOrderDetails == null 
                ? 0
                : inProcessNonRemnantWorkOrderDetails.Sum(a => (a.EstimatedQuantity - a.ActualQuantity));

            if (qtyAllocated == 0 && inProcessRemnantWorkOrderDetails.Any())
            {
                qtyAllocated = 0.1M;
            }
            return qtyAllocated;
        }
        else
        {
            return 0;
        }
    }
}

A:

Aron was correct. When I eager load the related entities by using the Include() method in my query, there is only 1 hit to the database.

