我目前遇到的问题是我有2个列表,我想根据第一个List中的值对第二个List进行排序,这是一个例子:
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对象,一个用于数据,一个用于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"
我已经尝试使用Google搜索排序这些方法,但所有LINQ语法都让我感到困惑,因为每个对象的类不同而我遇到了问题:(我能想到的唯一方法就是让for循环得到一个List的ID的索引并执行类似冒泡的排序,但它太麻烦而且效率低下。非常感谢帮助!
答案 0 :(得分:5)
您可以加入ID上的两个列表:
var query = from x in data
join y in dataToSort on x.ID equals y.ID
select y;
var result = query.ToList();
这保持了第一个列表data
的顺序。
您也可以通过这种方式轻松组合这两个列表:
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();
答案 1 :(得分:0)
像这样的东西可以做到这一点(伪代码):
dataToSort sortedData;
foreach data
{
sortedData.AddRange(from unsortedData.Where(x => x.ID == data.ID));
}
答案 2 :(得分: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();
答案 3 :(得分: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
答案 4 :(得分:0)
这应该可以解决问题:
var list = dataList
.Select(data => dataToSortList
.First(x => x.ID == data.ID)
)
.ToList();