c#linq不等于变化

时间:2012-10-10 19:28:42

标签: c# sql linq list

我有一个linq查询w /实体框架可以工作并获取所需信息,但现在我遇到了相反的问题。

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

我知道你只能使用“等于”linq,但我需要的信息不等于 即加入c.IsoNe中的ec,ap.idLook不等于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();

2 个答案:

答案 0 :(得分:2)

据我所知,你必须创建一个笛卡尔积,然后使用where-condition来过滤它。 (我可能会假设你想要一个内连接而不是一个左连接,但内连接是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();

答案 1 :(得分:0)

听起来像加入可能是错误的做法。查看联盟子查询