linq查询语法:如何生成两个列表组合的标准

时间:2012-04-11 18:24:24

标签: c# linq

我有两个列表,一个facebook列表和一个用户列表。

facebook对象只获取一个属性id,如:

public class EFacebook
{
    public string id { get; set; }
}

第二个列表是一个用户列表,但对象更复杂,每个用户都可以获得一个可空的提供者列表,其中一个提供者可以是facebook一个,每个提供者都获得一个id,如:

public class EUser
{
    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的用户。我正在尝试这样的事情:

var query1 =
    from i in users
    where i.EProviders.Any(j => j.ProviderType == EProvider.EnumProviderType.Facebook)
    select i.EProviders;

var query =
    from i in facebooks
    where i.id.Equals(???)
    select i;

2 个答案:

答案 0 :(得分:0)

以你已有的为基础,这可以起作用

var query2 =
    from i in users
    where i.EProviders.All(j => j.ProviderType != EProvider.EnumProviderType.Facebook)
    select i.EProviders;

答案 1 :(得分:0)

从完整列表中选择一个类似于此的投影(.Select):

users.Select( u => new { User: u, 
                         IsFacebookUser: facebook.Any( f => f.Id == u.Providers
                                                    .Single( p => p.providerType == facebookProvider).id) }

上面是象征性的,我没有机会编译。 有了这个,你就会得到一个标有bool的用户列表,如果有一个facebook账户的话。