从另一个列表中获取列表

时间:2012-04-10 22:23:05

标签: c#

我之前问了这个问题,但是我过度简化了这个问题,而且我仍然不知道如何以比我正在做的更好的方式做到这一点。

我有两张清单。

一,Facebook朋友列表,一个简单的对象,考虑facebook.id唯一的属性。

其次,一个用户列表,它是一个更复杂的对象,因为每个用户都获得了一个提供者列表(facebook,twitter等),但提供者列表可以为null,如果不为null,则不一定是提供者是一个Facebook。所以:

public class EFacebook
{
    public long Id { get; set; }
}

public class EUser
{
    public long Id { get; set; }
    /// <summary>
    /// Nullable
    /// </summary>
    public List<EProvider> EProviders { get; set; }
}

public class EProvider
{
    public enum EnumProviderType
    {
        Facebook = 2,
        Twitter = 3
    }
    public EnumProviderType ProviderType { get; set; }
    public string Id { get; set; }
}

我需要的是过滤Facebook列表以获取所有Facebook用户的朋友并获得所有不是用户的Facebook朋友。

2 个答案:

答案 0 :(得分:0)

假设List<EFacebook> fbList是第一个列表,List<EUser> usersList是第二个列表。 你可以这样做:

fbList.Where(x=>usersList.Select(x=>x.Id).Contains(x.Id)) ==&gt;这将返回用户的facebook实体列表。 第二个列表是这个fbList和这个之间的区别。

让我知道我是否正确理解了这个问题!

Tamash

答案 1 :(得分:0)

假设:

List<EFacebook> listEFacebookFriends = new List<EFacebook>();
List<EUser> listEUsers = new List<EUser>();

然后,您可以获取此处所有用户的Facebook好友列表:

var listEUsersOnFacebook = from user in listEUsers
    let fbProviders =
    from provider in user.EProviders
    where provider.ProviderType == EProvider.EnumProviderType.Facebook
    select provider.Id
    where fbProviders.Count() > 0
    select user.Id;

// this next call will get facebook friends that are users
var friendsOnFacebook = listEFacebookFriends.Where(x => 
                                listEUsersOnFacebook.Contains(x.Id));

在这里,您可以获得非Facebook用户:

var listEUsersNotOnFacebook = from user in listEUsers
    let fbProviders =
    from provider in user.EProviders
    where provider.ProviderType == EProvider.EnumProviderType.Facebook
    select provider.Id
    where fbProviders.Count() == 0
    select user.Id;

// this call will get facebook friends that are not users 
var friendsNotOnFacebook = listEFacebookFriends.Where(x => 
                            listEUsersNotOnFacebook.Contains(x.Id));