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

问题描述 投票:0回答:1

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

这是我的意思的一个例子:我有四个对象,其字符串属性为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:问题似乎与套管有关。

c# linq
1个回答
3
投票

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

    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" 。

© www.soinside.com 2019 - 2024. All rights reserved.