Linq to SQL,使用包含或重写查询的数据库结果加入内存列表

时间:2012-11-15 16:18:42

标签: sql linq linq-to-sql

大家好,我有以下查询,我试图在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

1 个答案:

答案 0 :(得分:2)

简答:从第一个查询声明(.ToList())的末尾删除q1来电。

当您致电ToList()时,您正在实现该查询的结果。或者更确切地说,你是在枚举它们。如果您移除了ToList来电,而不是q1List数据,那么您将拥有IEnumerable数据,如果加入另一个数据,LINQ可以进一步优化查询。