Q:

How can I speed this LINQ query up?

I know that there's a much more efficient way to do this, using predicates, but being fairly new, I'm not sure exactly how to go about it..
List<HousingAssignment> list;

using (OEContext context = new OEContext())
{
    var query =
        from ha in context.HousingAssignments
        where ((ha.BedID == bed.ID) &&
                (((ha.CheckIn <= checkin) && (ha.CheckOut >= checkin)) ||
                ((ha.CheckIn <= checkout) && (ha.CheckOut >= checkout))))
        select ha;

    list = query.ToList();
}

return list.Count;

A:

Since you're merely returning the count, you can compute it in your query using the Count method:
using (OEContext context = new OEContext())
{
  var query =
    from ha in context.HousingAssignments
    where ((ha.BedID == bed.ID) &&
            (((ha.CheckIn <= checkin) && (ha.CheckOut >= checkin)) ||
            ((ha.CheckIn <= checkout) && (ha.CheckOut >= checkout))))
    select ha;

  return query.Count();  
}

This eliminates pulling the values from your database locally, storing into the list, then "throwing away" the results.  Instead, the count will get computed on the server, and you'll only pull a single number across.
You can also potentially speed up the query on the server with proper indexing of the CheckIn and CheckOut columns.

