c# - LINQ to SQL 和 LINQ to Entity Join 与静态 AND 条件
问题描述
我正在尝试将以下Join
语句转换为 LINQ TO SQL 或 LINQ to Entity。我知道如何在任一实现中加入表格;但是,我正在为声明AND
中的条款而苦苦挣扎Join
。
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();
但是,我收到了ArgumentNullException
第二个加入声明。
对于 LINQ to Entity,我有以下内容,但是,这给了我一个不同IQueryable
的FormPat
,而不是Patient
.
var patients = Context.Set<Patient>().AsNoTracking()
.SelectMany(p => p.Forms)
.Where(fp => fp.Phase.Type == 2)
.Distinct();
解决方案
就 LINQ to Entity 而言,我能够弄清楚。我仍然想知道如何在 LINQ to SQL 中做到这一点。
我正在使用EF fluent API。我的Patient
对象看起来像:
public Patient()
{
Programs = new HashSet<Program>();
}
public virtual ICollection<PatientForm> Forms { get; set; }
我的PatientForm
对象看起来像:
public class PatientForm
{
public int FormId { get; set; }
public Patient CurrentPatient { get; set; }
public TxCyclePhase Phase { get; set; }
}
CyclePhase
对象看起来像:
public TxCyclePhase()
{
this.FormPats = new HashSet<PatientForm>();
}
public int Id { get; set; }
public virtual ICollection<PatientForm> FormPats { get; set; }
在实体配置中,我设置了关系。因此,在存储库中,我所要做的就是Any()
在选择Patient
表单时使用该功能。
var patients = Context.Set<Patient>().AsNoTracking()
.Where(p => p.Forms.Any(f => f.Phase.Type == 2))
.Distinct();
推荐阅读
- swift - 发生错误时向用户显示有意义消息的最常见格式是什么 - Swift
- c++ - 从 CMake 导出的 CodeLite 项目无法编译
- c# - .net core BackgroundService Http Server/GRPC - 停止方法?
- google-app-engine - 如何将现有的 docker 镜像推送到谷歌应用引擎
- laravel - laravel 在不应用强制转换的情况下获取数据
- c# - C#语法分析:获取类型成员
- c# - 一个视图的 2 个模型和转换不起作用
- python - `alembic revision --autogenerate` 产生冗余外键迁移
- java - 如何在java中订阅创建的对象中的属性
- ssis - SSIS 与目标 SQL Server 目标引发异常