我有一个查询,我一直在试图找出如何转换为linq:

select bjbecd, bjbesk, areotx
from insku
inner join iniwre on bjcomp=a7comp and bjbecd=a7becd and bjbesk=a7besk
inner join initem on bjcomp=arcomp and bjbecd=arbecd
where a7comp=1 and
a7wcde in (1,10) and
a7ohdq>0 and rtrim(a7becd) + rtrim(a7besk) not in
(select skucode from eoditems)

到目前为止,这是我的林肯:
(from i in db.INSKUs
    join w in db.INIWREs on
        new { i.BJCOMP, i.BJBECD, i.BJBESK }
        equals
        new { w.A7COMP, w.A7BECD, w.A7BESK }
    join t in db.INITEMs on
        new { i.BJCOMP, i.BJBECD }
        equals
        new { t.ARCOMP, t.ARBECD }
    where w.A7COMP == 1
    where w.A7WCDE == 1 || w.A7WCDE == 10
    where w.A7OHDQ > 0
    where !(from z in db.EODItems
            select z.SkuCode).Contains(w.A7BECD.TrimEnd() + w.A7BESK.TrimEnd())
    select new { i.BJBECD, i.BJBESK, t.AREOTX }
);

我在第一个join上收到一条错误消息,指出“join子句中的一个表达式的类型不正确。调用“join”时类型推断失败。
我做的所有搜索都与类型匹配错误有关,但是我四次检查了连接中的所有类型,它们都是相同的。

最佳答案

尝试这样做:

join w in db.INIWREs on
 new { i.BJCOMP, i.BJBECD, i.BJBESK }
    equals
       new { BJCOMP = w.A7COMP, BJBECD = w.A7BECD, BJBESK  = w.A7BESK }

应该有用。

08-19 03:46