使用LINQ按字母顺序比较字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LINQ按字母顺序比较字符串相关的知识,希望对你有一定的参考价值。
我有一组对象。每个对象都有一个字符串属性。我正在尝试获取这些对象的列表,其中字符串按字母顺序排列在指定字符串之前或之后。
这是我的意思的一个例子:我有四个对象,其字符串属性为apple
,banana
,carrot
和dirt
。我使用的指定字符串是c
。我想使用LINQ返回前两个对象,其字符串属性为apple
和banana
。作为奖励,包含carrot
的能力在同一语句中也不错,而不是为==
使用单独的LINQ查询。
这是我尝试过的(及其变体):
var query = from feature in features
where String.Compare(feature.ColumnValues[selectedField], stringToCompare, StringComparison.OrdinalIgnoreCase) < 0
select feature;
features
是我的收藏品。
但这并没有返回正确的对象。它返回按字母顺序排在前后的对象。
编辑:无法发布完整集合,因为它有数千个对象,但被比较的字符串是所有位置。例如,In US
,Maryland
,Near Texas
等。
一个Feature
对象有一个Dictionary<string, string>
称为ColumnValues
。 Key
值,这是我的selectedField
是LOCATION
。那个Value
的Key
是我比较我的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 字符串以按字母顺序排序?