1

我从数据库中列出了“公司”。

然后我有另一本字典,例如:

Dictionary<int, string> ordering = new Dictionary<int, string>();
ordering.Add(1, "VIP");
ordering.Add(2, "VIP+");
ordering.Add(3, "Regular");

公司列表必须按此词典排序。

我怎样才能做到这一点?

我不能用字典“订购”加入“公司”,如果我这样做了,我会得到一个例外。

有没有办法通过这个“排序”键来“排序”。

字典值(vip、vip+、regular)与我的公司列表中的一列相对应。

4

3 回答 3

1

就您需要使用它的方式而言,您的排序字典看起来好像是从后到前的,即根据文本键查找并给出数字排序。我建议首先“反转”您的排序字典,然后您可以对公司进行排序,以获得每个条目的字典查找成本,以及 LINQ 排序算法的成本。

var swappedOrdering = ordering.ToDictionary(kvp => k.Value, kvp => k.Key);
var orderedCompanies = companies.OrderBy(c => ordering[c.CompanyCategory]);

请记住,虽然您的排序字典是内存,而不是数据库,所以为了使用这种方法,您需要将所有记录假脱机到内存中。如果您希望数据库完成繁重的工作,则必须将此订购信息放入数据库中。

于 2013-07-30T09:11:43.707 回答
0

除了 Jon G 所说的,你也可以通过 join 来做到这一点。这样的事情应该可以解决问题:

var companyQuery = from c in companies
                   join kvp in ordering on c.CompanyCategory equals kvp.Value
                   orderby kvp.Key
                   select c;
于 2013-07-30T09:24:19.817 回答
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();
}
于 2013-07-30T09:34:43.750 回答