如何在LINQ中使用IN运算符

时间:2012-04-03 06:47:40

标签: asp.net linq

我有像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。

5 个答案:

答案 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

谢谢...