【问题标题】:linq to entity Contains() and nested querieslinq 到实体 Contains() 和嵌套查询
【发布时间】:2009-08-01 01:02:07
【问题描述】:

我在使用 linq 时遇到了问题,我会举例说明:

我有一个名为 Employee 的数据库表,其中包含 FirstName 和 LastName 列, 以及一种搜索员工的方法,该方法以 nameList 列表作为参数,该列表中的元素是格式为“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;

第一个和第二个查询给出:{“无法创建类型为'闭包类型'的常量值。在此上下文中仅支持原始类型('例如 Int32、String 和 Guid')。”} 异常

第三个:{“LINQ to Entities 无法识别方法 'Boolean Contains[String](System.Collections.Generic.IEnumerable`1[System.String], System.String)' 方法,并且此方法不能被翻译成商店表达式。"}

很高兴听到你的建议:)

谢谢!



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

【问题讨论】:

    标签: linux entity-framework


    【解决方案1】:

    我假设在这种情况下 nameList 是内存中的集合,并且您正在尝试使用 LINQ to SQL 技巧在实体框架内创建 SQL“IN”子句。不幸的是,EF 还不支持这种语法。根据您尝试匹配的记录数,您可能能够为您想要的每个孩子运行单独的查询。或者,您可以构建一个 entitysql 查询,使用连接将 nameList 中的多个项目作为单独的 OR 子句附加到 WHERE 操作中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多