0

我有一个带有实体框架的 linq 查询,它可以工作并获取所需的信息,但现在我在做相反的事情时遇到了麻烦。

目前它使用连接来获取链接表所需的所有数据,但我需要获取一些与某些连接不匹配的数据。

我知道你只能使用“等于”om linq,但我需要不等于的信息,即在 ap.idLook 上的 c.IsoNe 中加入 ec 不等于 ec.idAll

下面是工作代码,但不是我现在需要的。任何帮助,将不胜感激...

var test = (from bil in bilats
                join ap in c.Allegro on bil.idAll equals ap.idAll
                join ec in c.IsoNe on ap.idLook equals ec.idAll
                join cb in c.Comp on ap.idCompBuy equals cb.idComp
                join cs in c.Com on ap.idCompSell equals cs.idComp
                join iby in c.IsoNe on cb.idComp equals iby.idComp
                join iss in c.IsoNe on cs.idComp equals isl.idComp
             orderby bil.HBegin ascending
             where bil.HBegin >= ec.DateTStart
             where bil.HBegin < ec.DateTEnd
             select new
             {
                 Cont = ec.ContractID,
                 ContType = ap.idScheduleType,
                 Sel = isel.ISONE1,
                 Buy = ibel.ISONE,
                 HBegin = bil.HBegin,
              }).ToList();
4

2 回答 2

2

据我所知,您必须创建一个笛卡尔积,然后使用 where 条件对其进行过滤。(我做出了一个轻率的假设,即你想要一个内连接而不是左连接,但内连接是join关键字所代表的。)这样的事情:

var test = (from bil in bilats
                join ap in c.Allegro on bil.idAll equals ap.idAll
                from ec in c.IsoNe where ap.idLook != ec.idAll
                join cb in c.Comp on ap.idCompBuy equals cb.idComp
                join cs in c.Com on ap.idCompSell equals cs.idComp
                join iby in c.IsoNe on cb.idComp equals iby.idComp
                join iss in c.IsoNe on cs.idComp equals isl.idComp
             orderby bil.HBegin ascending
             where bil.HBegin >= ec.DateTStart
             where bil.HBegin < ec.DateTEnd
             select new
             {
                 Cont = ec.ContractID,
                 ContType = ap.idScheduleType,
                 Sel = isel.ISONE1,
                 Buy = ibel.ISONE,
                 HBegin = bil.HBegin,
              }).ToList();
于 2012-10-10T19:36:07.387 回答
0

听起来加入可能是错误的方法。查看联合子查询

于 2012-10-10T19:35:01.100 回答