我正在尝试使用Linq(C#)创建一个List,它是另一个列表的子集,其中要查询的值(从文本框)介于list对象的值之间:
下面是我的代码
filteredMaps = allMaps
.Where(map =>
map.BeginningValue.CompareTo( textValueFilter.Text.Trim().ToUpper() ) <= 0
&&
map.EndingValue.CompareTo( textValueFilter.Text.Trim().ToUpper() ) >=0
)
.ToList();
filteredMaps
在执行完这段代码后总是空的。我想我需要一个'select'子句在那里的某个地方,但还没有弄清楚语法。
我是Linq(和Lamdas)的新手
map是MapEntry类型的对象,它(部分)定义为
public readonly string BeginningValue;
public readonly string EndingValue;
allMap和filteredMap都定义为List<MapEntry>
我已经尝试了下面的代码,结果相同:
IEnumerable<MapEntry> mapEntries = (
from map in allMaps
where (
map.BeginningValue.CompareTo( textValueFilter.Text.Trim().ToUpper() ) <= 0
&&
map.EndingValue.CompareTo( textValueFilter.Text.Trim().ToUpper()) >= 0 )
select map
);
filteredMaps = mapEntries.ToList();
正如stuartd和jmcilhinney所指出的,我的CompareTo有缺陷,下面的代码起作用了:
string filter = textValueFilter.Text.Trim().ToUpper();
IEnumerable<MapEntry> mapEntries = (from map in (IEnumerable<MapEntry>)allMaps
where(map.BeginningValue.Substring(0,filter.Length).CompareTo(filter) <= 0
&& map.EndingValue.Substring(0,filter.Length).CompareTo(filter) >= 0) select map);
filteredMaps = mapEntries.ToList();
因为我知道BeginningValue和EndingValue将始终全部大写,所以我能够简化,但我将注意
1条答案
按热度按时间mrfwxfqh1#
您的问题不清楚,但是如果您希望
BeginningValue
和EndingValue
包含文本框字符串,请使用以下方法:如果希望
BeginningValue
和EndingValue
等于文本框字符串: