gpt4 book ai didi

linux - linq to entity Contains() 和嵌套查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:58 24 4
gpt4 key购买 nike

我在使用 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)’方法,而这个方法无法转换为存储表达式。"}

很高兴听到您的建议:)

谢谢!



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

最佳答案

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

关于linux - linq to entity Contains() 和嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com