[英]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.