0

我正在使用以下 linq 表达式来过滤列表:

var query =
   follows
      .Where(i => i.EUser.EProviders != null)
      .Join(
         ids,
         i => i.EUser.EProviders.Where(j => j.ProviderType == EProvider.EnumProviderType.Facebook).First().Ip,
         j => j.Ip,
         (i, j) => i);

查询正在运行,但我在 First() 关键字中遇到问题,因为当我需要比较任何类型的 facebook 提供程序时,我只比较第一个元素。我试图让所有关注者至少有一个 facebook 类型的提供者,并且提供者 ID 包含在 ID 中。

我认为这是可行的,但我对查询不满意。在我看来不对。

follows
.Where(i => i.EUser.EProviders != null)
.Where(i => i.EUser.EProviders.Where(j => j.ProviderType == EProvider.EnumProviderType.Facebook && ids.Select(k => k.Ip).Contains(j.Ip)).Count() > 0);
4

2 回答 2

0

不清楚你想要什么,但你可能想使用......

follows.SelectMany(f=>f.EUser.EProviders.Where(j => j.ProviderType == EProvider.EnumProviderType.Facebook))  

或类似的东西。

如果您不想只使用“First”,那么您使用了错误的运算符。

于 2012-04-12T23:07:46.127 回答
0

也不是很清楚,但似乎您希望在给定的 ip 列表中包含特定提供商类型的关注者列表。

var ids = ids.Select(m => m.Ip).ToList();

var query = follows.Where(i => i.EUser.EProviders.Any(m => m.ProviderType ==EProvider.EnumProviderType.Facebook && ids.Contains(m.Ip)));
于 2012-04-13T05:42:45.390 回答