2013-04-05 66 views
4
public class MyObject1 
{ 
    public Guid g1; 
    public Guid g2; 
    public Guid g3; 
} 

public class MyObject2 
{ 
    public Guid g4; 
} 


List<MyObject1> list1; 
List<MyObject2> list2; 

我想一個LINQ查詢將返回列表1中的所有對象MyObject1其中MyObject1.g2 == MyObject2.g4其中MyObject2對象居住在列表2LINQ到比較對象的兩個列表,其中一個對象有幾個列表

我已經寫了很多步驟做到這一點的代碼,但我想我可以在一次迭代中做到這一點。

所以像

var n = list1.Select(p=> p.g2).ToList() 

var o = list2.Intersect(n) 

,但現在我需要研究列表1使用鄰又是尷尬

回答

12

這聽起來像你想有一個join

var query = from x1 in list1 
      join x2 in list2 on x1.g2 equals x2.g4 
      select x1; 

還是在擴展方法語法:

var query = list1.Join(list2, x1 => x1.g2, x2 => x2.g4, (x1, x2) => x1); 

請注意,這樣只會讓你的項目從list1 - 如果你從list2需要相應的項目爲好,這是簡單的:

var query = from x1 in list1 
      join x2 in list2 on x1.g2 equals x2.g4 
      select new { x1, x2 }; 
+1

+1喬恩,我希望你不要讓那個狡猾的擴展方法連接語法作爲替代,雖然;) – mattytommo 2013-04-05 21:26:59

+0

@mattytommo - 但是...我喜歡的擴展方法 – 2013-04-06 02:52:22

+0

@ScottSelby即使連接和組BYS? Eeeeek:P – mattytommo 2013-04-06 10:46:36

1

如何:

var results = 
    from a in list1 
    join b in list2 on a.g2 equals b.g4 
    select a; 

這將返回所有來自list1的項目,其中list2中存在與MyObject1.g2 == MyObject2.g4中的項目。

3
var query = list1.Where(l1 => list2.Any(l2=> l2.g4 == l1.g2)); 
相關問題