2008-11-19 75 views
2

编辑:对于内部查询,每个内部查询可能有多个匹配项。它抓取了一堆具有相同game_ID的标签。那就是为什么.First或.Max无法使用。Linq帮助。 int.Contains和int == iqueryable不起作用

需要一些帮助,我在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 

我得到看起来像这样的错误:

操作“==”不能应用于操作数类型 '诠释' 和 '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 

与此错误:

“诠释”不包含一个定义为“包含”,没有扩展方法“包含”接受类型“诠释”的第一个参数可以发现

谁能帮我写个好的查询,将工作?

回答

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 

编辑更改的查询。

+0

看看编辑。 – 2008-11-19 03:56:28

+0

为了不好,我无法确认你们两人是否是答案。 – 2008-11-19 04:10:22

0

而不是Max()它可能应该是SingleOrDefault(),因为你永远不应该得到多个记录与GUID查找。尽管如此,两者都可以帮助你。底线是内部查询是一个集合,您需要告诉它如何从该集合中选择一行。

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”以防万一您可能获得多次匹配。