我需要获取与'某人'职位相同的雇员的数据。
var context = new Models.DBService();
var job = from emp in context.EMPs
where emp.ENAME.Equals("BLAKE")
select emp.JOB;
var result = from emp in context.EMPs
where emp.JOB.Equals(job)
select emp;
实际上发生的是,从第一个查询中,我得到了使用“ BLAKE”的作业的长度,而不是作业的名称。这是我的例外:
System.NotSupportedException:'无法比较类型的元素 'System.Data.Entity.Core.Objects.ObjectQuery`1 [[System.String, mscorlib,版本= 4.0.0.0,文化=中性, PublicKeyToken = b77a5c561934e089]]。仅原始类型,枚举 类型和实体类型受支持。'
答案 0 :(得分:2)
要真正从数据库中获得“工作”,您需要使用Single()
之类的东西来实现查询,假设您知道查询将只得到一个结果。
var job = (from emp in context.EMPs
where emp.ENAME.Equals("BLAKE")
select emp.JOB).Single();
或者,您也可以将job
查询和其他Contains
一起使用。
var result = from emp in context.EMPs
where job.Contains(emp.JOB)
select emp;
请注意,此时result
只是一个查询,您必须具体实现才能使用ToList
或通过在foreach
中进行迭代来获得员工。
答案 1 :(得分:0)
尝试这样的事情:
1º首先,您从所需的地方获得工作
2º您再次进行查询,将emp.Job与第一次查询中出现的字符串进行比较
3º完成
var job = (from emp in context.EMPs
where emp.ENAME.ToLower() == ("BLAKE").ToLower()
select emp.JOB).FirstOrDefault();
var result = from emp in context.EMPs
where emp.JOB == job
select emp).FirstOrDefault();