簡體   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