从另一个列表中的列表中查找所有ID

时间:2013-12-13 14:53:01

标签: c# linq

我有一个包含模型的列表,其中每个模型都有一个数字。

现在我想搜索另一个包含其他模型的列表,其中每个模型都可能包含第一个列表中的数字。

这就是我的模型的样子:

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

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

现在我有一份地址列表和一系列任务。 我想将我的任务列表过滤到只有AddressId在我的地址列表中的那些任务。

我的linq怎么样?

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

5 个答案:

答案 0 :(得分: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 };

答案 1 :(得分:0)

使用GroupJoin避免重复:

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

答案 2 :(得分:0)

请注意AddressId必须是公开的(但不建议您使用公共字段,以便将其更改为属性),这样您就可以执行此操作:

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

 taskList.Where(i => yourList.Contains(i.AddressId));

答案 3 :(得分: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));

答案 4 :(得分:0)

我经常喜欢使用的另一种选择:

我也可以使用HashSet<T>代替List<T>,然后您可以使用IntersectWith Method Intersect Method 来制作更流畅的代码: - )

所以你会有

var result = items1.Intersect(items2)