如何匹配在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
.. 我的解决方案获得 IEnumerable
的 string
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中具有多个用逗号分隔的整数值的列?的主要内容,如果未能解决你的问题,请参考以下文章