c#where with list和linq

Álv*_*cía 2 c# linq list where-in

我有两个列表,一个列表中object A有另一个列表objects B,如下所示:

ObjectA
{
    Int64 idObjectA;
    String name;
    ....
}

ObjectB
{
    Int64 idObjectB;
    Int64 idObjectA;
    String name;
    ....
}
Run Code Online (Sandbox Code Playgroud)

我有两个列表,一个用于Object A和另一个用Object B.我想创建一个list C只有的新的objects B,这IDObjectA是任何ID一个list A.

在SQL中,它将是以下内容:

select * from B where IDObjectA IN(1,2,3,4...);
Run Code Online (Sandbox Code Playgroud)

在我的例子中,值列表IN clause是列表ObjectA,其中包含属性idObjectA.

Céd*_*non 5

你可以使用Joinlinq方法通过加入listBlistA通过它们来实现这一点idObjectA,然后选择itemB.

var result = (from itemB in listB
              join itemA in listA on itemB.idObjectA equals itemA.idObjectA
              select itemB).ToList();
Run Code Online (Sandbox Code Playgroud)

该方法具有线性复杂度(O(n)).使用Where(... => ....Contains())或double foreach具有二次复杂度(O(n^2)).

  • 很好的答案,但在99%的情况下,`ToList`是多余的.(我假设问题中的`List`一词用来指代任何序列`IEnumerable <T>`而不是`List <T>`.) (2认同)