【问题标题】:How to match a column which has multiple integer values separated by commas in linq?如何匹配在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

谁能帮帮我。

谢谢

【问题讨论】:

    标签: c# linq


    【解决方案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://stackoverflow.com/a/26667855/3762855

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

      【讨论】:

        猜你喜欢
        • 2015-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多