【发布时间】:2017-11-30 20:04:17
【问题描述】:
我有一个包含城市名称和城市国家的城市列表,我想使用 LinQ 按所有列排序,匹配过滤器。
例如:
CITY_NAME | CITY COUNTRY
-------------+---------------
Buenos Aires | Argentina
Asuncion | Paraguay
Sydney | Australia
Abadeh | Iran
Acero | Bolivia
我想通过匹配 .StartsWith 的“A”字母但考虑所有列,但首先是 City_Country 然后是 City_Name 并按字母顺序排序,从而获得一个列表。
结果应该是:
Buenos Aires | Argentina
Sydney | Australia
Abadeh | Iran
Acero | Bolivia
Asuncion | Paraguay
这个:
.OrderBy(city => city.CITY_COUNTRY).ThenBy(city => city.CITY_NAME)
不起作用,因为先按国家/地区排序,然后按名称排序,我会得到如下结果:
Buenos Aires | Argentina
Sydney | Australia
Acero | Bolivia
Abadeh | Iran
Asuncion | Paraguay
这是错误的,因为 Abadeh |伊朗比 Acero 更匹配 |玻利维亚。
我尽量说清楚。
谢谢
【问题讨论】:
-
我没有时间给出一个完整的答案(而且我没有测试,所以它不够充实,不能成为一个),但它应该会让你朝着正确的方向前进。
Cities.Select(city => new Tuple<string, City>(city.CITY_NAME)).Union(Cities.Select(city => new Tuple<string, City>(city.CITY_COUNTY)).OrderBy(item => item.Item1).Select(item => item.Item2).Distinct()。最后的Distinct()是症结所在,LINQ to Objects 保持秩序,其他 LINQ 提供者可能不会。 -
“匹配得更好”是什么意思?两者都以“A”开头。 “字母顺序”是什么意思?对于哪一列或几列?为什么“澳大利亚悉尼”排在“伊朗阿巴德”之前? “澳大利亚”应该在“阿巴德”之后?
-
如果城市是新西兰国家的惠灵顿,@RodriFerry 应该出现在哪里?还是根本不应该出现(因为它不是以A开头)?
-
这些解决方案中的任何一个对您有用吗@RodriFerry?
标签: c# linq sorting sql-order-by