如何使用LINQ返回国家/地区列表,但将特定国家/地区放在顶部?

时间:2009-06-12 22:09:24

标签: linq linq-to-sql

我有一张表格,其中包含我用来填充下拉菜单的国家/地区列表。

如何构建LINQ查询,以便按字母顺序从该表返回国家/地区列表,但将USA放在顶部除外?

所以,如果表包含:

瑞典
美国
墨西哥
丹麦

它将返回:

美国
丹麦
墨西哥
瑞典

4 个答案:

答案 0 :(得分:5)

您可以使用国家/地区的名称作为辅助订购:

return countries.OrderBy(c => GetPrimaryOrdering(c)).ThenBy(c => c.Name);

int GetPrimaryOrdering(Country country) 
{ 
    return country.Name == "USA" ? 0 : 1
}

答案 1 :(得分:3)

试试这个(单行):

var Countries = new List<string>() { "Denmark", "USA", "Mexico" };
return Countries.OrderBy(c=> c=="USA"? " ": c);

说明:

这会按名称对国家/地区列表进行排序,将“”替换为应该是第一个的国家/地区。由于空格按字母顺序排在任何其他字母之前,因此将首先列出“默认”国家/地区。

答案 2 :(得分:0)

  1. 将美国添加到下拉列表中。

  2. 添加按字母顺序排列的国家/地区列表。

  3. 下拉控件将​​保留您添加项目的顺序。

答案 3 :(得分:0)

荒谬......

var lst = new List<string>()
  { "Sweden", "USA", "Mexico", "Denmark", "Ziptown" };

lst.Sort((x, y) =>
{
  if (x == "USA" || y == "USA")
  {
    if (x == y)
    {
       return 0;
    }

    return (x == "USA") ? -1 : 1;
  }
  else
  {
    return x.CompareTo(y);     
  }
}