根据另一个列表从中获取列表

本文关键字:列表 获取 另一个 | 更新日期: 2023-09-27 18:30:45

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

我得到了两个列表。

一个,Facebook好友列表,一个简单的对象,认为 facebook.id 是唯一的属性。

其次,用户列表,

这是一个更复杂的对象,因为每个用户都会获得内部提供商列表(Facebook,Twitter等),但提供商列表可以是空的,如果不是空,则不一定是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朋友。

根据另一个列表从中获取列表

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

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

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

塔玛什

假设:

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));