【问题标题】:Linq Help. int.Contains and int == iqueryable doesn't work林克帮助。 int.Contains 和 int == iqueryable 不起作用
【发布时间】:2008-11-19 03:40:10
【问题描述】:

编辑:对于内部查询,每个内部查询可能有多个匹配项。它抓取了一堆具有相同 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”不包含“包含”的定义,并且找不到接受“int”类型的第一个参数的扩展方法“包含”

谁能帮我写一个好的查询?

【问题讨论】:

    标签: c# asp.net linq


    【解决方案1】:

    由于您的内部查询可以返回多个匹配项,因此您只需将内部查询转换为列表并反转 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
    

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

    【讨论】:

    • 很遗憾,我无法确认你们两个都是答案。
    • 看起来这个速度更快,尽管它有更多的 LINQ 和 T-SQL 语法行。几毫秒……
    【解决方案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”,以防您可能会获得多次点击。

    【讨论】:

    • 很遗憾,我无法确认你们两个都是答案。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 2012-02-17
      • 1970-01-01
      • 2018-08-06
      • 2014-09-15
      • 1970-01-01
      • 2018-05-27
      • 2012-11-22
      • 2011-11-27
      相关资源
      最近更新 更多