大家好,我有以下查询,我试图在linq中写入sql:
Select * from PlazaI pi
join (
Select * from PlazaE pe where
NOT EXISTS(SELECT 1 FROM PlazaE pe1
WHERE pe.Id_plaza = pe1.Id_plaza AND pe1.Fecha > pe.Fecha AND pe1.Fecha < GETDATE() and pe1.Id_Emp != 0)
) pe on pe.Id_plaza = pieepo.Id_plaza
join Emp e on pe.Id_Emp = e.Id_Emp
join View ct on ct.Id_Nodo = pe.id_nodo
where pi.PlazaIe in ('some value')
查询工作正常。
现在我分成两部分查询,一部分用于子查询,另一部分用于连接和其他表格。
var q1 = (from pe in db.PlazaEmpleados
where !db.PlazaEmpleados.Any
(
pe1 => (pe1.Id_plaza.Equals(pe.Id_plaza) && pe1.Fecha > pe.Fecha && pe1.Id_Emp != 0 && pe1.Fecha > DateTime.Now)
) select pe).ToList();
为了测试目的,我只用一个表加入第一个子查询。
var q2 = (from pi in db.Context
join pe in (q1) on pi.Id_plaza equals pe.Id_plaza
select new MvcApplication1.Models.EmpleadoModel.EmpleadoPlazaVO
{
Id_Nodo = pe.id_nodo,
Id_plaza = pi.PlazaSome,
Num_Plaza = pi.Id_plaza,
});
问题在于,在我研究之后,我意识到我正在尝试使用数据库表加入内存表,并且我得到了异常:“本地序列不能在LINQ to SQL中使用” { {3}},
在某些帖子中,他们建议更改ANTA方法(我在第一个查询中使用)用于CONTAINS方法,问题是我将某个值与同一个表进行比较,所以基本上我不知道如何使用Contain翻译我的实际查询。
所以,我需要帮助以更好的方法重写linq to sql查询或帮助我使用CONTAING方法构建查询,我在Linq to Sql的这个世界中是新的,所以我知道我有这个问题。
提前致谢
---------编辑------
删除ToList()方法解决异常问题,但现在我认为我的翻译错误,因为我的SQL查询得到的结果与Linq2SQL不同。任何可以帮我检查这个。???正如@ ean5533建议我,我正在为SQL查询创建一个新问题。 Linq2SQL "Local sequence cannot be used in LINQ to SQL" error
答案 0 :(得分:2)
简答:从第一个查询声明(.ToList()
)的末尾删除q1
来电。
当您致电ToList()
时,您正在实现该查询的结果。或者更确切地说,你是在枚举它们。如果您移除了ToList
来电,而不是q1
是List
数据,那么您将拥有IEnumerable
数据,如果加入另一个数据,LINQ可以进一步优化查询。