如何在 IList 上使用 Linq,根据某些条件比较列表中存在的第一个值和第二个值

本文关键字:列表 比较 条件 存在 第二个 第一个 IList Linq | 更新日期: 2023-09-27 18:35:45

我面临的问题是,我想检查 Ilist 值的两个条件,我想从 Ilist 中获取第一个值。

例如:ilist元素包含以下值:

"[Name]","m","1","abcd" 

和元素1康那丁

"[Reset]","1.5". 

我想检查第一个元素是否有方括号,第二个元素不是"M"或"MD",

PFB 我尝试过的代码,但显然 key+1 不起作用。

element.Cast<Object>().Where(key=>((Convert.ToString(key).StartsWith("[") 
 && Convert.ToString(key).EndsWith("]"))
 &&(!((Convert.ToString(key+1).Contains("MD")
 ||(Convert.ToString(key+1).Contains("M"))))))

任何指示都受到高度赞赏。

如何在 IList 上使用 Linq,根据某些条件比较列表中存在的第一个值和第二个值

根据您的注释,您可以循环访问大列表,然后如上所述使用索引器。

 var rez= from p in BigList
          where p.Count() >1 && (p[0].StartsWith("[") && !p[1].Equals("M") && !p[1].Equals("MD"))
          select p;

这将返回所有具有 2 个以上元素的列表并满足您的要求

这是您要实现的目标吗---即仅从匹配列表中获取第一项?

from x in new List<List<string>> { new List<string> { "[Name]", "m", "1", "abcd" }, new List<string> { "[Reset]","1.5" } }
where x.Count > 1 && Regex.IsMatch(x[0], @"^'[.*']$") && !x[1].Equals("M", StringComparison.InvariantCultureIgnoreCase) && !x[1].Equals("MD", StringComparison.InvariantCultureIgnoreCase)
select x[0]