我从数据库中列出了“公司”。
然后我有另一本词典:
Dictionary<int, string> ordering = new Dictionary<int, string>();
ordering.Add(1, "VIP");
ordering.Add(2, "VIP+");
ordering.Add(3, "Regular");
公司名单必须由此词典订购。
我该怎么做?
我无法加入'公司'字典'订购',如果我这样做,我会得到例外。
有没有办法通过'订购'键'排序'。
字典值(vip,vip +,regular)与我公司列表中的列对应。
答案 0 :(得分:1)
您的订购字典看起来就像您需要使用它的方式一样是从前到后,这是基于文本键查找并提供数字排序。我建议首先“反转”您的订购字典,然后您可以对公司进行排序,以获得每个条目的字典查找成本,以及LINQ排序算法的成本。
var swappedOrdering = ordering.ToDictionary(kvp => k.Value, kvp => k.Key);
var orderedCompanies = companies.OrderBy(c => ordering[c.CompanyCategory]);
请记住,虽然您的订购字典是内存,而不是数据库,但是为了使用这种方法,您需要将所有记录回送到内存中。如果您希望数据库执行繁重的工作,则必须将此订购信息放入数据库中。
答案 1 :(得分:0)
除了Jon G所说的,您还可以通过加入来实现。这样的事情可以解决问题:
var companyQuery = from c in companies
join kvp in ordering on c.CompanyCategory equals kvp.Value
orderby kvp.Key
select c;
答案 2 :(得分:0)
您可以使用自定义的OrderBy语句,如:
public List<Company> OrderCompanies()
{
Dictionary<int, string> ordering = new Dictionary<int, string>();
ordering.Add(1, "VIP");
ordering.Add(2, "VIP+");
ordering.Add(3, "Regular");
// This could be the database source
List<Company> companies = new List<Company>();
companies.Add(new Company() { CompanyCategory = "VIP" });
companies.Add(new Company() { CompanyCategory = "VIP+" });
return companies
.OrderBy(company => ordering.First(pair => pair.Value == company.CompanyCategory).Key)
.ToList();
}