linq to entity Contains()和嵌套查询

时间:2009-06-30 13:24:59

标签: linux entity-framework

我遇到了linq的问题,我将在例子中解释:

我有一个名为Employee的数据库表,它获得了FirstName和LastName列, 以及搜索获取nameList列表作为参数的员工的方法,此列表中的元素是格式化为“Fred Burn”或this1“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')。”} exception

和第三:{“LINQ to Entities无法识别方法'Boolean Contains [String](System.Collections.Generic.IEnumerable`1 [System.String],System.String)'方法,这个方法无法转化为商店表达。“}

很高兴听到你的建议:)

谢谢!



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

1 个答案:

答案 0 :(得分:2)

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