0

我正忙着重写一个系统,并且正在使用 Linq 查询从数据库中提取数据。我习惯于普通的旧 TSQL 和存储过程,所以我的 Linq 技能不是最好的。我有一个 sql 查询,我尝试在 Linq 中重写它,其中包含一个连接、where 子句和 IN 语句。我做对了,但是当我运行 sql 查询时,我得到的值与 Linq 查询不同。某处我错过了一些东西,找不到原因。

这是SQL:

select 
    isnull(Sum(QtyCC) + Sum(QtyEmployee), 0) *
    isnull(Sum(UnitPrice), 0)[TotalRValue]             
from 
    tbl_app_KGCWIssueLines a
        inner join tbl_app_KGCWIssue b on b.IssueNrLnk = a.IssueNrLnk
where   
    b.CreationDate >= '2011-02-01' and 
    a.IssueNrLnk IN (
        select 
            IssueNrLnk
        from 
            tbl_app_KGCWIssue
        where   
            CustomerCode = 'PRO002' and   
            ISNULL(Tier1,'') = 'PRO002' and   
            ISNULL(Tier2,'') = 'HAMD01' and   
            ISNULL(Tier3,'') = '02' and   
            ISNULL(Tier4,'') = '02001' and  
            ISNULL(Tier5,'') = 'PTAHQ001' and   
            ISNULL(Tier6,'') = '035' and   
            ISNULL(Tier7,'') = '' and   
            ISNULL(Tier8,'') = '' and   
            ISNULL(Tier9,'') = '' and   
            ISNULL(Tier10,'') = ''
)

这是Linq:

ctx.ObjectContext.tbl_app_KGCWIssue
    .Join(ctx.ObjectContext.tbl_app_KGCWIssueLines, 
        i => i.IssueNrLnk, l => l.IssueNrLnk, (i, l) => new { i, l })
    .Where(o => o.i.CreationDate >= IntervalStartDate)
    .Where(p => ctx.ObjectContext.tbl_app_KGCWIssue
        .Where(a => 
            a.CustomerCode == CustomerCode && 
            a.Tier1 == employee.Tier1 && 
            a.Tier2 == employee.Tier2 && 
            a.Tier3 == employee.Tier3 && 
            a.Tier4 == employee.Tier4 && 
            a.Tier5 == employee.Tier5 && 
            a.Tier6 == employee.Tier6 && 
            a.Tier7 == employee.Tier7 && 
            a.Tier8 == employee.Tier8 && 
            a.Tier9 == employee.Tier9 && 
            a.Tier10 == employee.Tier10)
        .Select(i => i.IssueNrLnk)
        .Contains(p.l.IssueNrLnk))
    .Sum(p => p.l.UnitPrice * (p.l.QtyEmployee + p.l.QtyCC));
4

0 回答 0