使用LINQ按字母顺序比较字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LINQ按字母顺序比较字符串相关的知识,希望对你有一定的参考价值。

我有一组对象。每个对象都有一个字符串属性。我正在尝试获取这些对象的列表,其中字符串按字母顺序排列在指定字符串之前或之后。

这是我的意思的一个例子:我有四个对象,其字符串属性为applebananacarrotdirt。我使用的指定字符串是c。我想使用LINQ返回前两个对象,其字符串属性为applebanana。作为奖励,包含carrot的能力在同一语句中也不错,而不是为==使用单独的LINQ查询。

这是我尝试过的(及其变体):

var query = from feature in features
            where String.Compare(feature.ColumnValues[selectedField], stringToCompare, StringComparison.OrdinalIgnoreCase) < 0
            select feature;

features是我的收藏品。

但这并没有返回正确的对象。它返回按字母顺序排在前后的对象。

编辑:无法发布完整集合,因为它有数千个对象,但被比较的字符串是所有位置。例如,In USMarylandNear Texas等。

一个Feature对象有一个Dictionary<string, string>称为ColumnValuesKey值,这是我的selectedFieldLOCATION。那个ValueKey是我比较我的stringToCompare,为每个Feature

编辑2:问题似乎与套管有关。

答案

我尝试了你上面提供的代码。你可以使用以下过滤和排序列表:

    public class Feature
    {

        public int Id { get; set; }
        public string ColumnValues { get; set; }
    }

  var features = new List<Feature> { new Feature {Id=1,ColumnValues="carrot" } ,
                 new Feature {Id=1,ColumnValues="dirt" },
                  new Feature {Id=1,ColumnValues="banana" }, new Feature {Id=1,ColumnValues="apple" }
            };

  string strToComapre = "c";
  int lenOfString = 1;

 var query=(from feature in features
                  where String.CompareOrdinal(feature.ColumnValues, 0, strToComapre, 0, lenOfString) <= 0
         select feature).OrderBy(x => x.ColumnValues);

这是返回值apple,banana和carrot.I已将ColumnValues字段作为具有要比较的字符串的字段。因为原始字符串中可以有任意数量的字符,所以OrdinalComparison是正确的方法。

在这个例子中,我把变量lenOfString作为“1”但你可以根据字符串的长度适当地定义它。因为这里长度是“1”(我们比较“c”),我把长度设置为“ 1" 。

以上是关于使用LINQ按字母顺序比较字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何比较包含非英文字符的 unicode 字符串以按字母顺序排序?

在bash shell 上如何按字母顺序比较两个字符串 ?

如何在 PHP 中按字母顺序比较 2 个字符串?

csharp 在Swashbuckle Swagger中,此片段允许按字母顺序显示操作。

按字母顺序比较 2 个字符串以进行排序

有没有一种简单的方法可以按字母顺序对字符串中的字符进行排序