【发布时间】:2023-03-12 16:23:01
【问题描述】:
我有一个对象集合。每个对象都有一个字符串属性。我正在尝试获取字符串在指定字符串之前或之后按字母顺序排列的那些对象的列表。
这是我的意思的一个例子:
我有四个字符串属性为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 对象有一个名为 ColumnValues 的 Dictionary<string, string>。 Key 值,即我的selectedField 是LOCATION。那个Key 的Value 是我将我的stringToCompare 与每个Feature 进行比较。
编辑 2:问题似乎出在套管上。
【问题讨论】:
-
这并没有返回正确的对象。它返回了什么?
-
尝试使用排序字典。
-
更新了我的答案。如果字符串中有空格,是否会以某种方式将其按顺序降低?例如,我有一个字符串
In US,当我将它与“B”进行比较时,它会在查询中返回。 -
这段代码对我来说适用于“apple”、“banana”、“carrot”、“dirt”测试数据。与“c”相比,它返回“apple”、“banana”(0)。但是,我已经使用字符串列表而不是您的
feature对象对其进行了测试。介意提供MCVE吗? -
“在美国”应该是
>“B”。比较会逐个字符进行,所以空格没有影响。