5

我们有一个包含国家名称的列表。我们需要从黑白两个字母的列表中找到国家/地区的名称。就像所有国家的名称一样,名称以 b/w AG 开头,依此类推。我们创建以下 linq 查询,但它很难看。

var countryAG = from elements in countryList
where elements.StartsWith("A") || 
elements.StartsWith("B") || 
elements.StartsWith("C") || 
elements.StartsWith("D") || 
elements.StartsWith("E") || 
elements.StartsWith("F") || 
elements.StartsWith("G") || 
elements.StartsWith("H") 
select elements;

countryList 在 C# 中创建的位置

List< string> countryList = new List< string>();

任何帮助或任何其他有效的方式来完成上述任务?

4

6 回答 6

10
var countryAG = from elements in countryList
                where elements[0] >= 'A' && elements[0] <= 'H'
                select elements;

字符实际上只是数字,因此您可以这样比较它们

于 2011-08-27T19:46:45.487 回答
3

我现在无法测试,但我会尝试

countryList.Where((s) => s[0] <= 'A' && s[0] >= 'G');
于 2011-08-27T19:46:00.593 回答
2

尝试

char[] startingLetters = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
var countryAG = 
    from elements in countryList 
    where elements.IndexOfAny(startingLetters, 0, 1) == 0 
    select elements;

有关的信息,请参见此处IndexOfAny

于 2011-08-27T19:45:24.417 回答
2

您可以使用前缀列表,然后使用前缀列表进行比较 - 这样您就可以根据您感兴趣的范围轻松使用不同的前缀列表:

 List<string> prefixList = new List<string>() { "A", "B", "C", "D", "E", "F", "G" };
 var countryAG = countryList.Where( x=> prefixList.Any( p => x.StartsWith(p)));
于 2011-08-27T19:46:41.897 回答
1

尝试使用此代码:

var start = "a";
var end = "g";
var regex = new Regex(string.Format("^[{0}-{1}]", start, end));
var result = list.Where(x => regex.Match(x.ToLowerInvariant()).Success);

例如,“开始”和“结束”是静态的。

于 2011-08-27T20:08:32.047 回答
0

我有两个扩展功能:

public static IEnumerable<char> Range(char start, char end)
{
  return Enumerable.Range((int)start, (int)end - (int)start + 1).Select(i => (char)i);
}

它创建了一系列字符,并且

public static bool In(this string source, IEnumerable<string> collection)
{
  return collection.Contains(source);
}

这只是 的倒数Contains,主要是为了可读性。

我可以一起做:

where elements[0].In(Range('a', 'f')))

于 2017-04-22T19:31:00.817 回答