我之前问了这个问题,但是我过度简化了这个问题,而且我仍然不知道如何以比我正在做的更好的方式做到这一点。
我有两张清单。
一,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朋友。
答案 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));