2012-05-02 2 views
0

제목이 진흙으로 분명하다는 것이 확실하므로 예제를 던져 누군가가 올바른 방향으로 나를 가리킬 수 있는지 확인하십시오.Linq를 사용하여 수행 할 작업 : 객체 목록 내의 모든 목록 목록 컴파일

public class topObj 
{ 
    public List<midObj> Mids { get; set; } 
    public List<botObj> Bots { get { // do some LINQ magic here } } 
} 
public class midObj 
{ 
    public List<botObj> Bots { get; set; } 
} 
public class botObj 
{ 
} 

그래서, 상위 개체에서 나는 정상 개체의 목록 <>에있는 중간의 임의의 객체 목록 <>에있는 모든 바닥 개체의 목록을 얻기 위해 노력하고있어.

는 지금은 이런 일이 :

public List<botObj> Bots 
    { 
     get 
     { 
      List<botObj> lst = new List<botObj>(); 
      foreach (midObj mo in Mids) 
      { 
       lst.AddRange(mo.Bots); 
      } 

      return lst; 
     } 
    } 

그것은 물론, 작품,하지만 난 LINQ 적은 선에서이 작업을 수행하기위한 방법이 생각해야합니다.

답변

3
get { return Mids.SelectMany(mid => mid.Bots).ToList(); } 

는 또한 적어도 당신이 정말로 필요한 경우에만 모든 것을 평가하고 목록에 넣어 노력을 보낼 수 있도록 그냥하는 List보다는 IEnumerable<botObj>을 반환 생각 하는데요. 목록을 사용하여 수행중인 작업을 알고 있다면이 설명을 무시하십시오.

+0

Entity Framework에 적용 할 때 IENumerable이 List보다 훨씬 뛰어나다는 것을 알고 있지만 EF 외부에서 많은 차이점이 있습니까? 필자는 여러 다른 개발자가 그것을 사용할 장소에서이 빌드를 사용합니다. 그래서 List를 사용하면 List를 사용하여 IENumerable을 사용하는 것에 대해 들어 본 유일한 이유는 EH 기반 ...입니다. 우리는 사용하지 않습니다. – cavillac

+0

EF는 IEnumerable을 전혀 사용하지 않고 IQueryable을 사용하고 두 메서드가 동일한 메서드를 사용하지만 두 메서드의 실제 동작은 크게 다릅니다. IEnumerables는 메모리 객체를 처리 할 때 여전히 유용합니다 (모두 함께 사용됩니다). 아이디어는 당신이 메모리 내 컬렉션에 대한 질의를하는 것입니다. 나중에 쿼리의 결과를 열거 할 수 있지만 그 시점까지는 쿼리가 실행되지 않습니다. 실제로 목록이 필요한 경우 결과에 'ToList'를 호출하여 IEnumerable을 반환하는 항목을 잃지 않도록 할 수 있습니다. – Servy

0

당신은 이런 식으로 뭔가를해야 할 것 :

get{ Mids.SelectMany(x => x.Bots).ToList(); } 

는 희망이 도움이!

관련 문제