C# linq到实体返回重复输出

C# linq到实体返回重复输出,c#,linq,C#,Linq,我正在尝试将SQL查询转换为linq to实体 这是我的SQL查询 SELECT DISTINCT voidSEVT.RESTYPE, voidSEVT.SESID, voidWO.WONUM, voidSEVT.T_START, voidSEVT.USER3 FROM VOIDWO AS voidWO JOIN voidSEVT ON voidWO.SEQNUM = voidSEVT.SEQNUM LEFT OUTER JOIN PROJECT

我正在尝试将SQL查询转换为linq to实体

这是我的SQL查询

SELECT DISTINCT 
    voidSEVT.RESTYPE, voidSEVT.SESID, voidWO.WONUM, voidSEVT.T_START,
    voidSEVT.USER3
FROM
    VOIDWO AS voidWO 
JOIN 
    voidSEVT ON voidWO.SEQNUM = voidSEVT.SEQNUM 
LEFT OUTER JOIN 
    PROJECTS AS prj ON voidWO.PRJ_ID = prj.PRJ_ID 
LEFT OUTER JOIN
    RESTYPE ON voidSEVT.RTYPE = RESTYPE.CODE 
JOIN
    RSRCE as resource on voidSEVT.RESID = resource.RESID
WHERE
    (voidSEVT.USERFLAG4 != 1) 
    AND (LRTRIM(RTRIM(voidSEVT.USER3)) <> '')
这是我的linq to实体

public List<ReversalEntity> ReversalList()
{
   var db = new SchedwinEntities();
   var query = 
                ( from voidWO in db.VOIDWOes
                  join voidSEVT in db.VOIDSEVTs on voidWO.SEQNUM equals voidSEVT.SEQNUM into voidSEVT_join
                  from voidSEVT in voidSEVT_join.DefaultIfEmpty()
                  join prj in db.PROJECTS on voidWO.PRJ_ID equals prj.PRJ_ID into prj_join
                  from prj in prj_join.DefaultIfEmpty()
                  from voidSevtJoin in voidSEVT_join.DefaultIfEmpty()
                  join restype in db.RESTYPEs on voidSevtJoin.RTYPE equals restype.CODE into RESTYPEs_join
                  from restypes in RESTYPEs_join.DefaultIfEmpty()
                  join resource in db.RSRCEs on voidSEVT.RESID equals resource.RESID into RSRCS_join
                  where
                    (voidSEVT.USERFLAG4.value != 1) &&
                    (voidSEVT.USER3.Trim().Length > 0)

   select new
   {
       resourceType = voidSEVT.RESTYPE,
       voidSEVT.SESID,
       wonum = voidWO.WONUM,
       start = voidSEVT.T_START,
       usage = voidSEVT.USER3,
       SAPCCr = ((voidSEVT.RESTYPE == 5 || voidSEVT.RESTYPE == 0)?prj.USER3:prj.USER9),
       activity = restypes.USER2,
       sendercc = restypes.USER1,
       resdesc = RSRCS_join.FirstOrDefault().DES,
       Type=voidSEVT.RESTYPE,
       jobdesc = voidWO.JOBDESC,
   }).Distinct();
基本上每个记录都有3个副本,所以我的输出总计数是20。看起来有些连接在这里不合适,但不确定


有人告诉我这里缺少什么吗?

一些示例输出数据可能有助于排除故障


我的第一个怀疑可能是某种资本化的东西。SQL通常不区分大小写(除非有人设置了它),这在过去给我带来了一些类似的结果。

您好,试试看,您使用linq有4个外部联接,而使用SQL有2个外部联接。尽量不要加入你自己。使用导航属性。谢谢@GertArnold。正如你所提到的,我现在改变了对我来说很好的加入方式。
public List<ReversalEntity> ReversalList()
{
   var db = new SchedwinEntities();
   var query = 
                ( from voidWO in db.VOIDWOes
                  join voidSEVT in db.VOIDSEVTs on voidWO.SEQNUM equals voidSEVT.SEQNUM into voidSEVT_join
                  from voidSEVT in voidSEVT_join.DefaultIfEmpty()
                  join prj in db.PROJECTS on voidWO.PRJ_ID equals prj.PRJ_ID into prj_join
                  from prj in prj_join.DefaultIfEmpty()
                  from voidSevtJoin in voidSEVT_join.DefaultIfEmpty()
                  join restype in db.RESTYPEs on voidSevtJoin.RTYPE equals restype.CODE into RESTYPEs_join
                  from restypes in RESTYPEs_join.DefaultIfEmpty()
                  join resource in db.RSRCEs on voidSEVT.RESID equals resource.RESID into RSRCS_join
                  where
                    (voidSEVT.USERFLAG4.value != 1) &&
                    (voidSEVT.USER3.Trim().Length > 0)

   select new
   {
       resourceType = voidSEVT.RESTYPE,
       voidSEVT.SESID,
       wonum = voidWO.WONUM,
       start = voidSEVT.T_START,
       usage = voidSEVT.USER3,
       SAPCCr = ((voidSEVT.RESTYPE == 5 || voidSEVT.RESTYPE == 0)?prj.USER3:prj.USER9),
       activity = restypes.USER2,
       sendercc = restypes.USER1,
       resdesc = RSRCS_join.FirstOrDefault().DES,
       Type=voidSEVT.RESTYPE,
       jobdesc = voidWO.JOBDESC,
   }).Distinct();
    RESTYPE   SESID   WONUM            T_START    USER3     
0                   7245100 1477491          1352239200 0030\r\n0060\r\n
0                   7245100 1477491          1352239200 0030\r\n0060\r\n
0                   7245100 1477491          1352239200 0030\r\n0060\r\n
0                   7245100 1477491          1352239200 0030\r\n0060\r\n
4                   7245098 1477491          1352239200 0030\r\n0060\r\n
4                   7245098 1477491          1352239200 0030\r\n0060\r\n
4                   7245098 1477491          1352239200 0030\r\n0060\r\n
4                   7245098 1477491          1352239200 0030\r\n0060\r\n
etc...