1. ホーム
  2. c#

あるリストを別のリストで並べ替える

2023-09-23 11:26:30

質問

2つのリストオブジェクトがあります。1つは単なるintのリストで、もう1つはオブジェクトのリストですが、オブジェクトはIDプロパティを持っています。

私がしたいことは、オブジェクトのリストをそのIDによって、intのリストと同じソート順で並べ替えることです。

私はそれを動作させるために今しばらくの間遊んでいました、今のところ喜びはありません。

これは私が今持っているものです...

//**************************
//*** Randomize the list ***
//**************************
if (Session["SearchResultsOrder"] != null)
{
    // save the session as a int list
    List<int> IDList = new List<int>((List<int>)Session["SearchResultsOrder"]);
    // the saved list session exists, make sure the list is orded by this
    foreach(var i in IDList)
    {
        SearchData.ReturnedSearchedMembers.OrderBy(x => x.ID == i);
    }
}
else
{
    // before any sorts randomize the results - this mixes it up a bit as before it would order the results by member registration date                        
    List<Member> RandomList = new List<Member>(SearchData.ReturnedSearchedMembers);
    SearchData.ReturnedSearchedMembers = GloballyAvailableMethods.RandomizeGenericList<Member>(RandomList, RandomList.Count).ToList();

    // save the order of these results so they can be restored back during postback
    List<int> SearchResultsOrder = new List<int>();
    SearchData.ReturnedSearchedMembers.ForEach(x => SearchResultsOrder.Add(x.ID));
    Session["SearchResultsOrder"] = SearchResultsOrder;
}   

この要点は、ユーザーがメンバーを検索したとき、最初はランダムな順序で表示され、次に2ページ目をクリックすると、その順序のまま次の20件の結果が表示されるようにすることです。

Linq.OrderBy 節のパラメーターとして使用できる ICompare について読みましたが、簡単な例を見つけることができません。

私は、エレガントで非常にシンプルな LINQ スタイルのソリューションを望んでいます。

どんな助けでも最も感謝されます。

どのように解決するのですか?

別のLINQのアプローチです。

 var orderedByIDList = from i in ids 
                       join o in objectsWithIDs
                       on i equals o.ID
                       select o;