Property to compare in Linq is different by criteria. I feel like repeating myself but i don't know how to refactor this.
Linq condition is the same but property to compare is different
(BookingDate ,CheckInDate ,CheckOutDate) 

    protected void FilterByDateRange(ref IEnumerable&lt;ViewBooking&gt; pObjListBooking)
    {
        DateTime startDate;
        DateTime endDate;

        startDate = DateTime.ParseExact(txtStartDate.Text, "d", System.Globalization.CultureInfo.CurrentCulture);
        endDate = DateTime.ParseExact(txtEndDate.Text, "d", System.Globalization.CultureInfo.CurrentCulture).AddDays(1);

        switch(ddlOrderBy.Text)
        {
            case "Booking Date":
                pObjListBooking = pObjListBooking.Where(item =&gt; item.BookingDate &gt;= startDate &amp;&amp; item.BookingDate &lt; endDate);
            break;

            case "Check In Date":
                 pObjListBooking = pObjListBooking.Where(item =&gt; item.CheckInDate &gt;= startDate &amp;&amp; item.CheckInDate &lt; endDate);
           break;

            case "Check Out Date":
                pObjListBooking = pObjListBooking.Where(item =&gt; item.CheckOutDate &gt;= startDate &amp;&amp; item.CheckOutDate &lt; endDate);
            break;
        }
    }
You could do something like this, but I don't know, whether it's a good idea:

Func&lt;ViewBooking,DateTime&gt; getDate = null;
switch(...)
{
    case ...:
    getDate = (ViewBooking item) =&gt; item.BookingDate;
    break;
}

pObjListBooking = pObjListBooking.Where(item =&gt; getDate(item) &gt;= startDate &amp;&amp; getDate(item) &lt; endDate);