我使用以下代码将分页数据源绑定到转发器控件
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();
}
其中q
是
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();
现在我想用
希望按hotelname
或starRating
对数组q进行排序。
我找不到像
这样的方法q.sort();
或
q.orderBy(q->hotelName)
答案 0 :(得分:2)
对于成员对现有数组的就地排序:
Array.Sort(theArray, (x,y) => string.Compare(x.HotelName, y.HotelName));
答案 1 :(得分:2)
使用以下..
q.OrderBy(x => x.HotelName);
<强>更新强>
从会话中退回,按照这样做
//if you have concrete type instead of object, use that type
var t = (IEnumerable<object>)Session["q"];
更新2
您的预测应该是具体类型(即创建一个新的酒店类来表示您的投影),否则您将无法对投影的某些属性执行OrderBy
答案 2 :(得分:1)
q
对您来说是Array
类的实例,而不是某种类型的数组(即int[]
,string[]
,object[]
)。 Array
仅实现IEnumerable
,而不是IEnumerable<T>
,因此Linq方法不存在。这里的根本问题是它是一个匿名类型的数组,所以除了通过使用非常混乱的变通方法之外,你无法有效地获得强类型数组。
此时的最佳解决方案是创建一个新类来保存您的数据(即Hotel
),而不是将其置于匿名类型中。当您填充会话时,创建该类型的新实例(Hotel
),然后当您将其拉出会话时,将其转换为该类型的数组(Hotel[]
),而不是通用{ {1}}。此时,您将能够在对象上使用Linq方法。