检索提供列表中不存在id的所有区域

时间:2013-03-27 13:55:42

标签: linq linq-to-sql

我确信我必须在这里找到一些非常简单的东西..

好的,我有一个AreaIds列表。我想将该列表与MapArea表进行比较,并返回表中存在但不在提供的列表中的任何ID。

这是我想要检查的提供区域列表:

 var currentAreas = (from c in _entities.mapAreaLink
                            where c.listingId == id
                            select new
                                {
                                    c.MapArea.areaId
                                }
                            ).ToList();

这是获得mapAreas的详尽列表..

  var availableAreas = (from m in _entities.MapAreas
                              select new
                                  {
                                      m.areaId
                                  }
                                  ).ToList();

这会对两个列表进行比较,并获取maparea表中存在但不在maparealink中的项目(受我正在查看的项目的ID约束)。

var unusedAreas = availableAreas.Except(currentAreas).ToList();

我似乎把列表恢复正常,但我现在需要做的是根据上面的Except.tolist的结果返回maparea对象列表。

我以为我可以这样做:

        var mapareas = (from e in _entities.MapAreas
                        where unusedAreas.Contains(e.areaId)            
                        select e).ToList();

我在哪里和那里得到一个模棱两可的调用“无法在e.areaId上解析方法Contains(int)”。

我尝试过使用:

var unusedAreas = availableAreas.Except(currentAreas).ToArray();

没有欢乐..任何人都可以帮助我 - 我猜我必须在这里错过一个基本的基础。

非常感谢

1 个答案:

答案 0 :(得分:0)

您只使用一个int属性创建匿名类型。这不是必要的,它会导致后来的问题。如果您创建int列表,那么就可以了:

var currentAreas = (from c in _entities.mapAreaLink
                    where c.listingId == id
                    select c.MapArea.areaId).ToList();
var availableAreas = (from m in _entities.MapAreas
                      select m.areaId).ToList();