I am using following code to bind a paged datasource to repeater control
protected void Paging()
{
Array q = (Array)Session["q"];
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = q;
objPds.AllowPaging = true;
objPds.PageSize = Convert.ToInt32(ddlPageNo.SelectedValue);
objPds.CurrentPageIndex = CurrentPage;
lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "
+ objPds.PageCount.ToString();
// Disable Prev or Next buttons if necessary
cmdPrev.Enabled = !objPds.IsFirstPage;
cmdNext.Enabled = !objPds.IsLastPage;
rptHotels.DataSource = objPds;
rptHotels.DataBind();
}
where q is
getAvailableHotelResponse getres = new getAvailableHotelResponse();
getres = objsoap.getAvailableHotel(apiKey, destinationId, checkIn, checkOut, strCurrencyCode, "UK", false, rooms, f);
List<hotel> hr = new List<hotel>();
hr = getres.availableHotels.ToList();
List<BALHotelList> bh = new List<BALHotelList>();
bh = h.GetHotelListByDestinationId(destinationId);
var q = from a in bh
join b in hr on a.HotelCode equals b.hotelCode
orderby a.HotelName
select new
{
a.HotelCode,
a.ImageURL_Text,
a.HotelName,
a.StarRating,
a.HotelAddress,
a.Destination,
a.Country,
a.HotelInfo,
a.Latitude,
a.Longitude,
b.totalPrice,
b.totalPriceSpecified,
b.totalSalePrice,
b.totalSalePriceSpecified,
b.rooms
};
//rptHotels.DataSource = getres.availableHotels;
Session["q"] = q.ToArray();
now i want to use
want to sort the array q by hotelname or starRating .
I am not finding any method like
q.sort();
or
q.orderBy(q->hotelName)
qfor you is an instance of theArrayclass, rather than an array of some type (i.e.int[],string[],object[]).Arrayonly implementsIEnumerable, notIEnumerable<T>so the Linq methods aren’t there. The underlying problem here is that it is an array of an anonymous type, so other than through using really messy workarounds you can’t effectively get a strongly typed array back.The best solution at this point is to create a new class to hold your data (i.e.
Hotel) rather than putting it into an anonymous type. When you populate the session create new instances of that type (Hotel) , and then when you pull it out of the session cast it to an array of that type (Hotel[]), rather then the genericArray. At that point you will be able to use the Linq methods on the object.