在我的c#app中,我有自定义对象列表:
obj a,b,c,d,i,f,j
a.id = 1;
b.id = 2;
c.id = 3;
d.id = 4;
i.id = 5;
f.id = 6;
j.id = 7;
var firstList = new List<obj> {a,b,c,d,i,f,j};
我有int
的第二个清单
var secondList = new List<int> {5,6,2,1,3};
secondList
中的项目 - 这是firstList
按特定顺序的ID。此列表可能不包括firstList
中的所有ID(例如4
和7
}
我的问题:我如何按参数id
和方案排序我的第一个列表,如secondList
中所述。
如果在secondList
中遗漏了一些ID,请将firstList
的相应项添加到结果列表的末尾。
多个OrderBy(...).ThenBy(...)
的不幸解决方案无法帮助我。
答案 0 :(得分:1)
var firstListDic = firstList.ToDictionary(o => o.id);
var secondListSet = new HashSet<int>(secondList);
var result = secondList.Select(i => firstListDic[i])
.Concat(firstList.Where(o => !secondListSet.Contains(o.id)))
.ToList();
答案 1 :(得分:0)
这将是:
secondList.Union(firstList.Select(o => o.id))
.Select(o => firstList.FirstOrDefault(k => k.id == o))
.ToList();
如果您的 obj 类包含类似
的内容class obj
{
public int id;
public override string ToString()
{
return id.ToString();
}
}
然后你可以测试这个
var firstList = new List<int> { 1, 2, 3, 4, 5, 6, 7 }
.Select(o => new obj() {id = o}).ToList();
var secondList = new List<int> { 5, 6, 2, 1, 3 };
var thirdlist =
secondList
.Union(firstList.Select(o => o.id))
.Select(o => firstList.FirstOrDefault(k => k.id == o))
.ToList();
Console.WriteLine(string.Join(",",thirdlist));