2013-12-13 206 views
0

我有一個包含模型的列表,其中每個模型都有一個數字。查找列表中的所有ids在另一個列表中

現在我想搜索另一個包含其他模型的列表,其中每個模型可能都有第一個列表中的編號。

這是我的模型的樣子:

public class Task 
{ 
    int AddressId; //foreign key 
} 

public class Address 
{ 
    int Id; //primary key 
} 

現在我有地址的列表和任務列表。 我想將我的任務列表只篩選到AddressId位於我的地址列表中的任務。

我的linq怎麼樣?

result = tasks.Where(t => t.AddressId == ???) 

回答

0

看看Join

from m in model1s 
join n in model2s on m.Id equals n.Fk 
select n 

爲了讓他們進入陣列,如果你不知道:

var model1s = new[] { model1A, model1B, model1C }; 
var model2s = new[] { model2A, model2B, model2C }; 
0

使用羣組加入以避免重複:

result = from l2 in list2 
     join l1 in list1 on l2.FK equals l1.Id into g 
     select l2; 
0

注意AddressId必須是公共的(但是不建議有公共字段,以便您可以將其更改爲一個屬性),所以你可以這樣做:

var yourList = addressList.Select(i => i.Id).Distinct(); 

taskList.Where(i => yourList.Contains(i.AddressId)); 
0
List<Task> taskList = new List<Task>{new Task(2), new Task(3), new Task(5)}; 
List<Address> addrList = new List<Address>{new Address(1), new Address(3), new Address(2)}; 

var result = taskList.Where(x => addrList.Select(y => y.Id).Contains(x.AddressId)); 
0

只是一個比較另類的,我經常喜歡用:

I U還可以使用的,而不是HashSet<T>然後List<T>您可以使用IntersectWith MethodIntersect Method這使得更流暢的代碼:-)

所以你應該有

var result = items1.Intersect(items2) 
相關問題