2013-03-28 55 views
0

我想将我的SQL查询转换为LINQ实体。LINQ实体返回重复输出

这是我的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)) <> '') 

我的SQL查询输出

RESTYPE SESID WONUM   T_START USER3  
0     7245100 1477491   1352239200 0030\r\n0060\r\n 
4     7245098 1477491   1352239200 0030\r\n0060\r\n 
4     7245099 1477491   1352239200 0030\r\n0060\r\n 
5     7245097 1477491   1352239200 0030\r\n0060\r\n 
5     7245101 1477491   1352239200 0030\r\n0060\r\n 

这是我的LINQ到实体像下面

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(); 

我的SQL查询返回20个recrords

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... 

基本上每个记录对于每条记录都有3个重复项,所以总计数为20我的输出。看起来像一些联接在这里如何不合适,但不确定。

有人建议我在这里错过什么?

+0

嗨,http://stackoverflow.com/questions/4441659/linq-distinct-not-working-correctly试试这个 – Niventh 2013-03-28 05:02:10

+1

你有4个外部连接与linq与2与SQL。尽量不要加入你自己。使用导航属性。 – 2013-03-28 12:23:26

+0

谢谢@GertArnold。正如你所提到的那样,改变了现在适合我的加入。 – Usher 2013-04-02 05:31:30

回答

0

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

我的第一个嫌疑人会是某种大写或某事。 SQL通常不区分大小写(除非有人设置了它),并且过去对于我来说也有一些类似的结果。