C#:带有拆分和解析的LINQ查询

时间:2014-11-13 16:05:40

标签: c# linq split

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

这是我的方法

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

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

我在网上看过以下内容但是没有编译:

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

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

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

  • source是一个包含对象的List,其字段为Keywords,字符串为1,2,4,7
  • 我得到的错误是关于x未被定义。

3 个答案:

答案 0 :(得分:2)

以下是选择大于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

答案 1 :(得分:1)

以下是如何实现这一目标的示例。为了简单起见,我确实要对要检查的数字进行串联,但是你明白了。

    // 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);                           
    }

答案 2 :(得分:0)

感谢所有答案,虽然没有使用正确的语言,但他们找到了答案:

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

其中val是我正在寻找的号码。