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未定义。
下面是选择大于 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 是我正在寻找的数字。