C#:具有拆分和分析功能的 LINQ 查询

本文关键字:功能 LINQ 查询 拆分 | 更新日期: 2023-09-27 18:30:27

我有一个带有字符串字段的对象,其中包含一个逗号分隔的整数列表。我正在尝试使用 LINQ 检索列表中具有特定编号的那些。

这是我的方法

from p in source 
where (p.Keywords.Split(',').something.Contains(val)) 
select p;

其中 p.关键字是要拆分的字段。

我在网上看到了以下内容,但就是不编译:

from p in source 
where (p.Keywords.Split(',').Select(x=>x.Trim()).Contains(val)) 
select p;

我是 LINQ 新手,但在更简单的查询方面取得了成功。

更新:看起来我错过了一些细节:

  • source 是一个列表,其中包含带有字段的关键字,字符串为 1,2,4,7
  • 我得到的错误是关于x未定义。

C#:具有拆分和分析功能的 LINQ 查询

下面是选择大于 3 的数字的示例:

string str = "1,2,3,4,5,6,7,8";
var numbers = str.Split(',').Select(int.Parse).Where(num => num > 3); // 4,5,6,7,8

如果您有列表,请更改Where子句:

string str = "1,2,3,4,5,6,7,8";
List<int> relevantNums = new List<int>{5,6,7};
var numbers = str.Split(',').Select(int.Parse).Where(num => relevantNums.Contains(num)); // 5,6,7

如果您不是在寻找数字而是寻找字符串,那么:

string str = "1,2,3,4,5,6,7,8";
List<string> relevantNumsStr = new List<string>{"5","6","7"};
var numbers = str.Split(',').Where(numStr => relevantNumsStr.Contains(numStr)); // 5,6,7

下面是如何实现此目的的示例。为简单起见,我确实在要检查的数字上串起来,但你明白了。

    // class to mimic what you structure
    public class MyObj
    {
        public string MyStr{get;set;}
    }
    //method
    void Method()
    {
            var myObj  = new List <MyObj>
            { 
                new  MyObj{ MyStr="1,2,3,4,5"},
                new  MyObj{ MyStr="9,2,3,4,5"}
            };
            var num =9;
            var searchResults = from obj  in myObj
                                where !string.IsNullOrEmpty(obj.MyStr) &&  
                                    obj.MyStr.Split(new []{','})
                                        .Contains(num.ToString())
                                select obj;
            foreach(var item in searchResults)                           
            Console.WriteLine(item.MyStr);                           
    }

感谢您的所有答案,尽管不是用正确的语言,但它们使我找到了答案:

from p in source where (p.Keywords.Split(',').Contains(val.ToString())) select p;

其中 val 是我正在寻找的数字。