编辑:对于内部查询,每个内部查询可能有多个匹配。它使用相同的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'的第一个参数
任何人都可以帮我写一个好的查询吗?
答案 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查找获得多个记录。两者都会让你到那里。底线是内部查询是一个集合,您需要告诉它如何从该集合中选择一行。