2013-04-25 51 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?

回答

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

我不知道你真的将其更改为LINQ版本...

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

这是more efficient既然你想一种join

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