如何匹配在linq中具有多个用逗号分隔的整数值的列?

Posted

技术标签:

【中文标题】如何匹配在linq中具有多个用逗号分隔的整数值的列?【英文标题】:How to match a column which has multiple integer values separated by commas in linq? 【发布时间】:2016-07-13 09:01:37 【问题描述】:

我有一个列表,其中我有多个整数值的列(用逗号分隔)。

eg:
------------------------
| Program | Module      |
------------------------
| I       | 1,2,3       |
------------------------
| II      | 2, 3        |
------------------------
| III     | 1,3         |
------------------------

现在,假设我想选择模块为 2 的程序。

 int sid = 2; 
 IEnumerable<int> ids = Program.All.FindAll( item => 
     sid.contains(
         item.Module.Split(',').Select(s => (int)s)
     )
 )

得到编译错误:

无法将字符串转换为 int

谁能帮帮我。

谢谢

【问题讨论】:

【参考方案1】:

您只能将您的 sid 转换为字符串一次,然后像字符串一样搜索它

var sidAsStr = sid.ToString();
var result = Program.All.FindAll(item => item.Module.Split(',')
    .Any(s => s.Trim() == sidAsStr));

也许它是更高效的解决方案,因为它避免了许多解析操作

【讨论】:

【参考方案2】:

考虑到程序 ID 是罗马数字,因此您应该提供自定义转换以将它们放入 int.. 我的解决方案获得 IEnumerablestring

 string sid = "2"; 
 IEnumerable<string> ProgramIds = 
   Program
  .Where( prg => 
     (("#") + prg.Module + "#").Contains("#"+sid+"#") 
    ||
     (("#") + prg.Module + "#").Contains("#"+sid+",") 
    ||
     (("#") + prg.Module + "#").Contains(","+sid+",") 
     )
  ).Select(prg => prg.Program)

对于罗马数字转换,试试这些链接,它们都是很好的解决方案......

https://***.com/a/26667855/3762855

https://***.com/a/27976977/3762855

【讨论】:

以上是关于如何匹配在linq中具有多个用逗号分隔的整数值的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ 查找包含 2 个逗号分隔的字符串的匹配项

如何根据两个逗号分隔值的列中的任何一个值获取记录

用逗号分隔的字符串转换为逗号分隔的整型数组(前端技巧)

匹配列中的逗号分隔值

正则表达式逗号分隔分隔符

T-SQL -- 将逗号分隔的列转换为多列