2012-04-10 2 views
0

나는 이전에이 질문을했지만 간략하게 요약 했었고 나는 아직도 내가하는 것보다 더 나은 방법으로 그것을 수행하는 방법을 모른다.다른 목록을 기반으로 목록 가져 오기

두 개의 목록이 있습니다.

하나, 페이스 북의 친구 목록, 간단한 개체, facebook.id 유일한 속성을 고려하십시오.

둘째, 각 사용자가 내부 (Facebook, Twitter 등)의 공급자 목록을 가져 오기 때문에 더 복잡한 개체입니다. 그러나 공급자 목록은 null이 될 수 있으며 null이 아닌 경우 반드시 그렇지는 않습니다. 공급자는 페이스 북이다. 그래서 :

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

내가 사용자가해야 할 일은 모든 페이스 북의 친구를 얻고 사용자가 아닌 모든 페이스 북 친구를 얻을 수있는 페이스 북의 목록을 필터링하는 것입니다.

+0

이전 질문에 대한 답에서 어떤 부분을 이해하지 못 했습니까? http://stackoverflow.com/questions/10096826/get-elements-from-list-based-on-another-list – BrokenGlass

답변

0

List<EFacebook> fbList이 첫 번째 목록이고 List<EUser> usersList이 두 번째 목록이라고 가정합니다. 다음과 같이 할 수 있습니다 :

fbList.Where(x=>usersList.Select(x=>x.Id).Contains(x.Id)) ==> 이것은 사용자 인 페이스 북 엔티티의 목록을 반환합니다. 두 번째 목록은이 fbList와이 목록의 차이점입니다.

질문을 올바르게 이해했는지 알려주세요.

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

당신이 사용자가 여기에있는 모든 페이스 북 친구 목록을 얻을 수 있습니다 :이 가정

Tamash

+0

EUser와 EFacebook 사이의 동등성은 user.Id 및 facebook.Id에 없습니다. user.EProvider <타입의 facebook> .Id와 facebook.Id. –

0

당신이 당신의 페이스 북 친구를 얻을 수 있습니다 여기에

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

을 그리고 그 사용자가 아님 :

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에 없습니다. user.EProvider .Id와 facebook.Id 사이에 있습니다. –