Lambda表达式和连接

时间:2012-04-12 23:00:33

标签: c# linq

我正在使用以下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);

2 个答案:

答案 0 :(得分:0)

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

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

或类似的东西。

如果您不想只是'第一',那么您使用了错误的操作符。

答案 1 :(得分:0)

也不是那么清楚,但似乎你想要一个给定ip列表中包含的某个Provider Type的关注者列表。

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