2013-04-25 2 views
2
List<Node> resultList = new List<Node>(); 
NodeEqualityComparer comparer = new NodeEqualityComparer(); 

foreach (Vector3 move in moveList) 
{ 
    foreach (Node sight in sightList) 
    { 
     if (comparer.Equals((Vector3)sight.position, move)) 
      resultList.Add(sight); 
    } 
} 

어떻게이 소스를 linq으로 변경해야합니까? 난 당신이 정말 LINQ 버전으로 변경해야 확실하지 않다이 소스를 LINQ로 변경해야하는 방법은 무엇입니까?

답변

3
var resultList = moveList.SelectMany(m => sightList.Where(s => comparer 
             .Equals((Vector3)s.position, m)).ToList(); 
0

...

List<Node> resultList; 
NodeEqualityComparer comparer = new NodeEqualityComparer(); 

resultList = (from m in moveList 
      from s in sightList 
      where comparer.Equals((Vector3)s.position, m) 
      select s).ToList(); 
1

당신이 join의 일종 원하기 때문에이 more efficient입니다 :

List<Node> resultList = moveList 
    .Join(sightList, m => m, s => (Vector3)s.position, (m, s) => s, comparer) 
    .ToList(); 
관련 문제