[英]select unique list from list<string> using linq and substring c#
我有
List<string> fileListServiceLine;
以下是列表中的值;
A073662937EMC900200202EST PT-OFF/OPD VISIT 0016224DIAGNOSTIC LAB TEST
A098281448EMC900700103EST PT-OFF/OPD VISIT 0016111SELFCARE TRAINING
我有一个标识符
string identifier = EMC9002002;
我从配置文件中获得此标识符值。
在我的实际案例中,我在上述列表字符串中获得了两个以上的值。
我试图过滤列表fileListServiceLine并仅获取那些与标识符匹配的值。 标识符将出现在fileListServiceLine列表中的一项中,并且只有一个列表项是匹配的大小写。
我正在尝试下面的代码,它没有给出确切的结果。
var servLineRecords = fileListServiceLine.GroupBy(s => s.Substring(location.ServiceLineIdentifierStart - 1, location.ServiceLineIdentifierLength) == identifier );
location.ServiceLineIdentifierStart和location.ServiceLineIdentifierLength我将从配置文件中获取上述值,以找到identifer匹配值的确切位置。
提前致谢。
使用此linq语句:
var servLineRecords = fileListServiceLine.Where(s => s.ToLower().Contains(identifier.ToLower())).FirstOrDefault();
您需要改为使用Contains()
方法,如下所示。 因为您知道只有一个与标识符匹配的值,所以您可以使用First()
并获得第一项
fileListServiceLine.Where(s => s.Contains(identifier)).First();
如果要进行不区分大小写的搜索,请改用IndexOf()
方法,例如
fileListServiceLine.SingleOrDefault(s => s.IndexOf(identifier, StringComparison.OrdinalIgnoreCase) >= 0);
您可以使用Single
或SingleOrDefault
。 例如,
fileListServiceLine.Single(s => s.Contains(identifier));
如果不完全匹配, Single
将引发异常,而SingleOrDefault
将返回null
。
我建议将Contains()
与在两个字符串上使用ToLower()
低级外壳结合使用,以找到匹配的元素。 如果未找到任何元素,则FirstOrDefault()
返回默认值。
var record = fileListServiceLine.Where(s => s.ToLower().Contains(identifier.ToLower())).FirstOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.