我有一个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();
答案 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)
听起来像加入可能是错误的做法。查看联盟或子查询