Linq帮助。 int.Contains和int == iqueryable不起作用

时间:2008-11-19 03:40:10

标签: c# asp.net linq

编辑:对于内部查询,每个内部查询可能有多个匹配。它使用相同的game_ID抓取一堆标签。这就是为什么.First或.Max不起作用。

需要一些帮助,我在LINQ中有一个查询,如下所示:

from yy in Tags_Lookups
where yy.Tag_ID == (from xx in Tags_Lookups
where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c")
select xx.Tag_ID)
select yy

我收到的错误如下:

运算符'=='不能应用于'int'和'System.Linq.IQueryable'类型的操作数

我也试过这个没有运气:

from yy in Tags_Lookups
where yy.Tag_ID.Contains(from xx in Tags_Lookups
where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c")
select xx.Tag_ID)
select yy

出现此错误:

'int'不包含'Contains'的定义,并且没有扩展方法'Contains'可以找到接受类型'int'的第一个参数

任何人都可以帮我写一个好的查询吗?

3 个答案:

答案 0 :(得分:2)

由于你的内部查询可以返回多个匹配,你只需要将内部查询转换为列表并反转contains子句的意义,我认为。

from yy in Tags_Lookups
where (from xx in Tags_Lookups
       where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c")
       select xx.Tag_ID).ToList()
                        .Contains( yy.Tag_ID )
select yy

编辑根据新信息更改了查询。

答案 1 :(得分:2)

刚看到编辑 - 我认为这就是你想要的(但检查我的语法):

from yy in Tags_Lookups
join xx in Tags_Lookups on yy.Tag_ID Equals xx.Tag_ID
where xx.Game_ID == new Guid("4962d645-711c-4db8-a7ce-ae9b36dd730c")
select yy

这将为每个匹配的Game_ID获取一个Tags_Lookups值。您可能希望将整个事物包装在括号中并添加“.Distinct”,以防您可能获得多次点击。

答案 2 :(得分:0)

它应该是SingleOrDefault(),而不是Max(),因为你永远不应该使用GUID查找获得多个记录。两者都会让你到那里。底线是内部查询是一个集合,您需要告诉它如何从该集合中选择一行。