3

次のコードを使用して、ページ化されたデータソースをリピーター コントロールにバインドしています

  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またはで配列 q をソートしたいstarRating

次のような方法が見つかりません

q.sort(); 

また

q.orderBy(q->hotelName)
4

3 に答える 3

2

メンバーによる既存の配列のインプレースソートの場合:

Array.Sort(theArray, (x,y) => string.Compare(x.HotelName, y.HotelName));
于 2012-07-27T18:51:35.010 に答える
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 を実行できません

于 2012-07-27T18:52:40.607 に答える
1

qあるタイプの配列 (つまり、、、 )ではArrayなく、クラスのインスタンスです。 を実装するだけで、Linq メソッドが存在しないわけではありません。ここでの根本的な問題は、匿名型の配列であるため、非常に厄介な回避策を使用しない限り、厳密に型指定された配列を効果的に取得できないことです。int[]string[]object[]ArrayIEnumerableIEnumerable<T>

この時点での最善の解決策はHotel、匿名型に入れるのではなく、データを保持する新しいクラスを作成することです (つまり )。セッションにデータを入力すると、そのタイプ ( ) の新しいインスタンスが作成Hotelされ、セッションから引き出すとHotel[]、ジェネリックではなく、そのタイプ ( )の配列にキャストされArrayます。その時点で、オブジェクトで Linq メソッドを使用できるようになります。

于 2012-07-27T19:29:17.193 に答える