我有
List<string> fileListServiceLine;
下面的是列表中的值;
A073662937EMC900200202EST PT-OFF/OPD VISIT 0016224DIAGNOSTIC LAB TEST
A098281448EMC900700103EST PT-OFF/OPD VISIT 0016111SELFCARE TRAINING
我有一个标识符
string identifier = EMC9002002;
我从配置文件中获取此标识符值。
在我的实际案例中,我在上面提到的列表字符串中获得了2个以上的值。
我正在尝试过滤列表fileListServiceLine并仅获取与标识符匹配的值。 标识符将出现在fileListServiceLine列表中的一个项目中,并且只有一个列表项将是匹配的大小写。
我正在尝试以下代码,但没有给出确切的结果。
var servLineRecords = fileListServiceLine.GroupBy(s => s.Substring(location.ServiceLineIdentifierStart - 1, location.ServiceLineIdentifierLength) == identifier );
location.ServiceLineIdentifierStart和location.ServiceLineIdentifierLength 我将从配置文件中获得上述值,以找到identifer匹配值的确切位置。
提前致谢。
答案 0 :(得分:3)
使用此linq语句:
var servLineRecords = fileListServiceLine.Where(s => s.ToLower().Contains(identifier.ToLower())).FirstOrDefault();
答案 1 :(得分:1)
您需要使用Contains()
方法,如下所示。由于您知道只有一个值与标识符匹配,因此您可以使用First()
并获取第一个项目
fileListServiceLine.Where(s => s.Contains(identifier)).First();
如果您想要进行不区分大小写的搜索,请使用IndexOf()
方法,而不是
fileListServiceLine.SingleOrDefault(s => s.IndexOf(identifier, StringComparison.OrdinalIgnoreCase) >= 0);
答案 2 :(得分:1)
您可以使用Single
或SingleOrDefault
。 e.g,
fileListServiceLine.Single(s => s.Contains(identifier));
如果没有一个匹配项, Single
将抛出异常,而SingleOrDefault
将返回null
。
答案 3 :(得分:1)
我建议在两个字符串上使用Contains()
结合使用ToLower()
的下部套管来查找匹配元素。如果未找到任何元素,FirstOrDefault()
将返回默认值。
var record = fileListServiceLine.Where(s => s.ToLower().Contains(identifier.ToLower())).FirstOrDefault();