Linq查询-根据首字母b/w两个范围查找字符串

rslzwgfq  于 2023-09-28  发布在  其他
关注(0)|答案(8)|浏览(95)

我们有一个包含国家名称的列表。我们需要从列表B/W中找到两个字母的国家名称。如名称以B/w A-G开头的所有国家/地区的名称等。我们创建了以下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>();

有什么帮助或其他有效的方法来完成上述任务?

m3eecexj

m3eecexj1#

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

字符实际上只是数字,因此可以将它们作为数字进行比较

jk9hmnmh

jk9hmnmh2#

我现在没法测试但我会试试

countryList.Where((s) => s[0] <= 'A' && s[0] >= 'G');
wfveoks0

wfveoks03#

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

List<string> prefixList = new List<string>() { "A", "B", "C", "D", "E", "F", "G" };
 var countryAG = countryList.Where( x=> prefixList.Any( p => x.StartsWith(p)));
r6hnlfcb

r6hnlfcb4#

尝试

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的信息,请参见here

lxkprmvk

lxkprmvk5#

尝试使用此代码:

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);

例如,“start”和“end”是静态的。

n6lpvg4x

n6lpvg4x6#

我有两个扩展函数:

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')))

yvfmudvl

yvfmudvl7#

List<string> mainList = new List<string>()
        {
           "A","B","DD","EE","F","G","EE","CC","DD","Q","R","CC"
        };

        List<string> searchList = new List<string>() { "DD", "EE", "CC" };

        var finalList = mainList.Where(x => searchList.Any(p => p == x)).ToList();
yrdbyhpb

yrdbyhpb8#

两种根据字符串首字母过滤列表的方法:

  1. list = list.Where(x => x.WordText.ToUpper().StartsWith(Character));
  2. list = list.Where(x => Regex.IsMatch(x.WordText.ToUpper().Substring(0, 1), Character));

相关问题