我有两个列表,一个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;
答案 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账户的话。