2012-04-10 11 views
0

私はこの質問を以前に聞いたことがありますが、私はそれを単純化してしまいましたが、私はやっているよりも良い方法でこれを行う方法はまだ分かりません。他のリストに基づいてリストを取得する

2つのリストがあります。

1つは、facebookの友人のリスト、単純なオブジェクト、facebook.idは唯一のプロパティと考えてください。

第2に、各ユーザが(Facebook、Twitterなど)内部のプロバイダのリストを取得するため、より複雑なオブジェクトですが、プロバイダリストは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

前の質問に対する答えでは、あなたはどの部分を理解しませんでしたか? http://stackoverflow.com/questions/10096826/get-elements-from-list-based-on-another-list – BrokenGlass

答えて

0

List<EFacebook> fbListが最初のリストで、List<EUser> usersListが2番目のリストであるとします。 あなたは次のようなことができます:

fbList.Where(x=>usersList.Select(x=>x.Id).Contains(x.Id)) ==>これは、ユーザーであるFacebookのエンティティのリストを返します。 2番目のリストは、このfbListとこれとの違いです。

質問を正しく理解しているかどうかを教えてください。

Tamash

+0

EUserとEFacebookの間の同等性はuser.Idとfacebook.Idにはないuser.EProvider <タイプのfacebook> .Idとfacebook.Id。 –

0

この仮定すると:そして、あなたはここのユーザーであるすべてのFacebookの友達のリストを取得することができます

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

を:

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

EUserとEFacebookの間の等価性はuser.Idとfacebook.Idではなく、user.EProvider .Idとfacebook.Idの間にあります。 –

関連する問題