0

我之前问过这个问题,但我过度简化了它,我仍然不知道如何以比我正在做的更好的方式来做(for)。

我有两个清单。

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

其次,一个用户列表,它是一个更复杂的对象,因为每个用户在里面(facebook、twitter等)都会得到一个provider列表,但是providers list可以为null,如果不为null,provider不一定是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 朋友。

4

2 回答 2

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));
于 2012-04-11T00:08:14.167 回答
0

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

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

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

塔玛什

于 2012-04-10T22:31:01.037 回答