我有一个带有T-SQL的复杂脚本,我无法将其转换为LINQ语法:
SELECT cc.ContractID,
Max(CASE WHEN cc.CompanyID = vc.CompanyID THEN vc.CompanyTitle END) AS CompanyID,
Max(CASE WHEN cc.ContractorID = vc.CompanyID THEN vc.CompanyTitle END) AS ContractorID
FROM ConContracts cc
JOIN ViewCompanies vc
ON vc.CompanyID IN ( cc.CompanyID, cc.ContractorID )
GROUP BY cc.ContractID
任何人都可以帮助我吗?
答案 0 :(得分:2)
我使用Linqer尝试转换此查询,最后得到:
from cc in db.ConContracts
from vc in db.ViewCompanies
where
vc.CompanyID == cc.CompanyID ||
vc.CompanyID == cc.ContractorId
group new {cc, vc} by new {
cc.ContractID
} into g
select new {
g.Key.ContractID,
CompanyID = g.Max(p => (p.cc.CompanyID == p.vc.CompanyID ? p.vc.CompanyTitle : null)),
ContractorID = g.Max(p => (p.cc.ContractorId == p.vc.CompanyID ? p.vc.CompanyTitle : null))
}
我不是LINQ专家,所以不确定这是否是一个有效的答案,但如果它至少在功能上令人满意,可能会有所帮助或有趣,因为这意味着你可以使用它Linqer回答你的问题。
答案 1 :(得分:0)
这与您的T-SQL完全等效,但我怀疑它可能会为您提供所需的结果。
我怀疑ContractID对于您的ConContracts表是唯一的,而CompanyID对于ViewCompanies表是唯一的,因此只有在您使用group by时才需要添加max。
因此,如果您的表格定义正确,您可以执行类似
的操作(from cc in ConContracts
select new
{
cc.ContractID,
CompanyID = cc.Company.CompanyTitle,
ContractorID = cc.Contractor.CompanyTitle
}