我有像14,15,18
这样的ProjectId列表,我想使用linq从我的数据表中搜索这些项目。
现在我创建了像
这样的查询IEnumerable<DataRow> drProjList = from a in dtProj.AsEnumerable()
where a.Field<int>("ProjectId")
.ToString()
.Contains(projFilter)
select a;
但我没有得到0元素。
任何机构都可以建议我使用linq中的IN
运算符。
提前致谢
修改 projFilter是纯字符串,具有14,15,18,......项目ID。
答案 0 :(得分:3)
字符串的“包含”在这里不是一个真正的选择。您应该首先将projFilter转换为正确的整数列表。
var projFilter2 = new HashSet<int>(projFilter.Split(',').Select(i => int.Parse(i)));
然后才检查它是否包含所需的数字。
IEnumerable<DataRow> drProjList =
from a in dtProj.AsEnumerable()
where projFilter2.Contains(a.Field<int>("ProjectId"))
select a;
答案 1 :(得分:1)
我对AsEnumerable()了解不多,但我会反过来这样做,就像这样:
List<int> intProjFilter = new List<int>();
foreach(string filter in projFilter.Split(','))
intProjFilter.Add(int.Parse(filter));
from a in dtProj
where projFilter.Contains(a.ProjectID)
select a;
如果有帮助,请告诉我
答案 2 :(得分:1)
您需要先将项目过滤器解析为整数集合。
var projectIds = projFilter.Split(',').Select(x => Convert.ToInt32(x)).ToList();
var drProjList =
from a in dtProj.AsEnumerable()
where projectIds.Contains(a.ProjectId)
select a;
答案 3 :(得分:0)
也许是这样的:
IEnumerable<DataRow> drProjList =
(
from a in dtProj.AsEnumerable()
where projFilter.Contains(a.Field<int>("ProjectId").ToString())
select a;
)
或者您也可以这样做:
IEnumerable<DataRow> drProjList=dtProj.AsEnumerable()
.Where(a=>projFilter
.Contains(a.Field<int>("ProjectId")
.ToString()));
答案 4 :(得分:0)
我不知道c#那么我想在vb.net中给出答案,希望对你有所帮助。
Dim dtProj As DataTable
dtProj = FillProjectList()
Dim projIdFilter() As Integer = {14, 15, 16}
Dim drRow = From p In dtProj.AsEnumerable _
Where projIdFilter.Contains(p.Field(Of Integer)("ProjectId")) _
Select p
谢谢...