使用linq创建一个列表,该列表是另一个列表的子集

6uxekuva  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(155)

我正在尝试使用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将始终全部大写,所以我能够简化,但我将注意

mrfwxfqh

mrfwxfqh1#

您的问题不清楚,但是如果您希望BeginningValueEndingValue包含文本框字符串,请使用以下方法:

var filteredMaps = mapEntries.Where(map =>
        map.BeginningValue.ToUpper().Contains(textValueFilter.Text.ToUpper()) 
             &&
        map.EndingValue.ToUpper().Contains(textValueFilter.Text.ToUpper()) 
 ).ToList();

如果希望BeginningValueEndingValue等于文本框字符串:

var filteredMaps = mapEntries
.Where(map =>
      map.BeginningValue.Equals(textValueFilter.Text, StringComparison.CurrentCultureIgnoreCase) 
       &&
      map.EndingValue.Equals(textValueFilter.Text, StringComparison.CurrentCultureIgnoreCase) 
      ).ToList();

相关问题