根据另一个列表从中获取列表
本文关键字:列表 获取 另一个 | 更新日期: 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));