代码之家  ›  专栏  ›  技术社区  ›  shkipper

linq to entity包含()和嵌套查询

  •  1
  • shkipper  · 技术社区  · 16 年前

    我对Linq有问题,我将在示例中解释:

    我有一个名为employee的数据库表,其中有firstname和lastname列, 以及一种搜索员工的方法,该方法获取一个名列表作为参数,该列表中的元素的格式为“fred burn”或“grim reaper”, 已经毫无运气地尝试了这些方法=[

    //just all employees
    var allData = from emp in Context.Employee select emp;
    
    var test1 = from emp in allData
                where(emp.FirstName + " " + emp.LastName).Contains
                ("" + ((from n in nameList select n).FirstOrDefault()))
                select emp;
    
    var test2 = (from emp in allData
                 where (emp.FirstName + " " + emp.LastName)
                 == ((from n in nameList select n).FirstOrDefault())
                 select emp);
    
    var test3 = from emp in allData
                where (from n in nameList select n).Contains
                (emp.FirstName + " " + emp.LastName)
                select emp;
    

    第一个和第二个查询给出:“无法创建类型为”closure type“的常量值。此上下文中只支持基元类型(“Int32、String和Guid”)。异常

    第三:“Linq to Entities无法识别方法”Boolean Contains[string](System.Collections.Generic.IEnumerable“1[System.String],System.String)”方法,并且此方法无法转换为存储表达式。“

    很高兴听到你的建议:)

    谢谢您!



    附笔
    是的,我知道可以在列表中拆分名称并分别比较它们,但仍然好奇为什么这些查询不起作用。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Jim Wooley    16 年前

    在本例中,我假定名称列表是内存中的集合,并且您正试图使用LINQ to SQL技巧在实体框架内创建一个SQL“in”子句。不幸的是,EF还不支持这种语法。根据您尝试匹配的记录数,您可能可以为每个想要的孩子运行单独的查询。或者,可以使用concatenation构建EntitySQL查询,以在where操作中将名称列表中的多个项作为单独的or子句附加。