我有一个元素集合:
public class CompanyVistracksDomain
{
public int ID { get; set; }
public string Name { get; set; }
public int VistracksAccountId { get; set; }
}
和另一个元素集合:
public class VistrackAccountInfoDomain
{
public int Id { get; set; }
public string Name { get; set; }
}
所以,我有:
List<CompanyVistracksDomain> companies =
await _companyService.CompanyListHasVistracksIdAsync();
和
List<VistrackAccountInfoDomain> accList =
await _vistracksService.GetAllAccountsAsync(companies);
他们有类似的元素列表。 第一个序列包含第二个序列中出现的所有元素。第一个序列已排序。如何按第一顺序排序第二个集合?
答案 0 :(得分:2)
OP的评论表明第二个集合是第一个集合的正确子集。在这种情况下,您可以简单地将第一个集合与第二个集合相交。这将有效地返回第二个集合的元素,但它们出现在第一个集合中的顺序:
List<CompanyVistracksDomain> companies =
await _companyService.CompanyListHasVistracksIdAsync();
List<VistrackAccountInfoDomain> accList =
await _vistracksService.GetAllAccountsAsync(companies);
List<VistrackAccountInfoDomain> sorted =
companies.Intersect(accList);
如果VistrackAccountInfoDomain
不是来自CompanyVistrackDomain
,那么您必须手动模仿Intersect
行为:
public IEnumerable<VistrackAccountInfoDomain> Intersect(
CompanyVistracksDomain first,
VistrackAccountInfoDomain second)
{
Set<int> set = new Set<int>();
Dictionary<int, VistrackAccountInfoDomain> content =
new Dictionary<int, VistrackAccountInfoDomain>();
foreach (TSource element in second)
{
set.Add(element);
content[element.Id] = element;
}
foreach (TSource element in first)
if (set.Remove(element.Id))
yield return content[element.Id];
}
此实现假设至少有一些方法可以匹配两个序列的元素,例如某些Id
属性。
答案 1 :(得分:1)
假设他们的ID对于每个条目都是唯一的,您可以尝试这个(无法自我测试):
var idList = companies.Select(y => y.ID).ToList();
var result = accList
.OrderBy(x => idList.IndexOf(x.Id))
.ToList();
答案 2 :(得分:-3)
using System.Linq;
IEnumerable<CompanyVistracksDomain> companies = new List<CompanyVistracksDomain>();
IEnumerable<VistrackAccountInfoDomain> accList = new List<VistrackAccountInfoDomain>();
companies = companies.OrderBy(o => o.Name );
accList = accList.OrderBy(o => o.Name );