繁体   English   中英

从列表中选择唯一列表 <string> 使用linq和子字符串C#

[英]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);

您可以使用SingleSingleOrDefault 例如,

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM