C#Collection Filtering,我从哪里开始

时间:2014-03-30 23:46:30

标签: c# .net linq entity-framework lambda

我有一个集合让我们称之为“用户”,又称一组USER

用户有一组联系人。

我只是希望获得与其他用户共同的特定用户的所有联系人。

我正在学习Lambda / Linq表达式,但不确定这是否应该解决这种集合过滤问题。

所以我真的只是寻找2组的交集。

3 个答案:

答案 0 :(得分:1)

你不能简单地对两个集合做“==”。但是,如果联系人有某种ID并且用户不能两次使用相同的联系人,那么这很容易做到:

User user = ...
var contactIds = user.Contacts.Select(c => c.Id).ToArray();
var usersWithMatchingContacts = this.unitOfWork.UserRepository.Get()
    // basically, we're checking that the number of matching contacts is the same as the
    // total number of contacts for the user, which means that the user has the same
    // set of contacts. If you just want to require some overlap, change 
    // the "== u.Contacts.Count" to "> 0"
    .Where(u => u.Contacts.Count(c => contactIds.Contains(c.Id)) == u.Contacts.Count);

答案 1 :(得分:1)

//input data
var firstId = 12;
var secondId = 23;

var firstUser = users.First(user => user.Id == firstId);
var secondUser = users.First(user => user.Id == secondId);

var commonContacts = firstUser.Contacts
                              .Where(contact =>
                                  secondUser.Contacts.Contains(contact))

答案 2 :(得分:1)

使用LINQs Intersect方法

var commonContacts = firstUser.Contacts.Intersect(secondUser.Contacts)