我有一个带有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新手,但在简单查询方面取得了成功。
更新 看起来我错过了一些细节:
答案 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是我正在寻找的号码。