使用linq和substring c#

时间:2017-08-09 12:50:02

标签: c# linq

我有

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匹配值的确切位置。

提前致谢。

4 个答案:

答案 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)

您可以使用SingleSingleOrDefault。 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();