【发布时间】:2019-09-06 14:40:34
【问题描述】:
我正在尝试将以下 Join 语句转换为 LINQ TO SQL 或 LINQ to Entity。我知道如何在任一实现中加入表格;但是,我正在努力处理Join 语句中的AND 子句。
SELECT DISTINCT
p.LastName,
p.FirstName
FROM
dbo.Patient p INNER JOIN dbo.FormPat fp ON p.PatientID = fp.PatientID
INNER JOIN dbo.TxCyclePhase tcp ON fp.TxCyclePhase = tcp.TxCyclePhaseID AND tcp.Type = 2
就 LINQ to SQL 而言,我有以下几点:
var query = (from p in Context.Set<Patient>().AsNoTracking()
join fp in Context.Set<PatientForm>().AsNoTracking() on p.Id equals fp.PatientId
join tcp in Context.Set<TxCyclePhase>().AsNoTracking() on new { fp.TxCyclePhaseId, seconProperty = true } equals new { tcp.Id, seconProperty = tcp.Type == 2 }
select new
{
p.FirstName,
p.LastName,
}).Distinct();
但是,我在第二个 join 语句中收到了 ArgumentNullException。
对于 LINQ to Entity,我有以下内容,但是,这给了我一个独特的 IQueryable 或 FormPat,而不是 Patient。
var patients = Context.Set<Patient>().AsNoTracking()
.SelectMany(p => p.Forms)
.Where(fp => fp.Phase.Type == 2)
.Distinct();
【问题讨论】:
-
我想我的SQL to LINQ Recipe 会帮助你。在这种情况下,规则 6:在连接
equals的每一侧创建一个匿名对象。
标签: c# entity-framework linq linq-to-sql linq-to-entities