0

以前にこの質問をしましたが、単純化しすぎたため、(for) よりも良い方法で行う方法がまだわかりません。

2 つのリストを取得しました。

1 つは Facebook の友達のリストで、単純なオブジェクトで、facebook.id を唯一のプロパティと見なします。

次に、ユーザーのリストです。これはより複雑なオブジェクトです。これは、各ユーザーが内部 (facebook、twitter など) のプロバイダーのリストを取得するためですが、プロバイダーのリストは null になる可能性があり、null でない場合、必ずしもプロバイダーが facebook であるとは限りません。 1。そう:

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 の友達を取得することです。

4

2 に答える 2

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));
于 2012-04-11T00:08:14.167 に答える
0

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

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

質問を正しく理解できたかどうか教えてください!

タマシュ

于 2012-04-10T22:31:01.037 に答える