5

現在、2つのリストがあり、最初のリストの値に従って2番目のリストを並べ替えたいという問題が発生しています。例を次に示します。

public class data
{
    public string Name{get; set;}
    public int ID{get; set}
}
public class dataToSort
{
    public int ID{get; set;}
    public string retrievedData{get; set}
    public string timeStamp{get; set}
}

たとえば、2つのListオブジェクトがあります。1つはデータ用、もう1つはdataToSort用で、その内容は次のとおりです。

data: "Alpha", "80"           dataToSort: "21", "XA", "YA"
      "Beta", "47"                        "47", "XB", "YB"
      "Charlie", "153"                    "80", "XC", "YC"
      "Delta", "21"                       "153","XD", "YD"

したがって、私がやりたいのは、次のように、dataToSortの順序をデータ内のIDの順序と等しくすることです。

dataToSort: "80", "XC", "YC"
            "47", "XB", "YB"
            "153","XD", "YD"
            "21", "XA", "YA"

これらを並べ替える方法をグーグルで試しましたが、すべてのLINQ構文で混乱し、各オブジェクトのクラスが異なるために問題が発生します:(考えられる唯一の方法は、forループを使用して次のインデックスを取得することです。 1つのリストのIDで、バブルソートのようなことをしますが、面倒で非効率的です。ヘルプをいただければ幸いです。

4

5 に答える 5

6

IDの2つのリストに参加できます。

var query = from x in data
            join y in dataToSort on x.ID equals y.ID
            select y;

var result = query.ToList();

これにより、最初のリストの順序が維持されますdata


この方法で2つのリストを簡単に組み合わせることができます。

var query = from x in data
            join y in dataToSort on x.ID equals y.ID
            select new
            {
                x.Name,
                x.ID,
                y.retrievedData,
                y.timeStamp,
            };

var result = query.ToList();
于 2012-04-24T10:32:53.713 に答える
0
List<data> lstofdata = new List<data>();
List<dataToSort> lstdataToSort = new List<dataToSort>();

var q = from d in lstofdata 
        join s in lstdataToSort on d.ID equals s.ID 
        orderby d.Name 
        select s
于 2012-04-24T10:36:07.407 に答える
0

これでうまくいくはずです:

var list = dataList
           .Select(data => dataToSortList
               .First(x => x.ID == data.ID)
           )
           .ToList();
于 2012-04-24T10:37:43.630 に答える
0

このような何かがトリックを行うことができます(擬似コード):

dataToSort sortedData;

foreach data
{
    sortedData.AddRange(from unsortedData.Where(x => x.ID == data.ID));
}
于 2012-04-24T10:31:58.503 に答える
0

両方のリストに参加して注文することができますIndexOf

var ordered = (from ds in dataToSort
              join d in data
              on ds.ID equals d.ID
              orderby data.IndexOf(d)
              select ds).ToList();
于 2012-04-24T10:33:02.497 に答える