2017-07-31 24 views
0

私は流暢なAPIとEfコアを使用しています。エンティティフレームワークコア - (サブクエリの種類)

これは私のLINQです:

var data = (from candidateHP in _cempContexto.CandidateHiringProcessSummary 
       join jobsHP in _cempContexto.JobHiringProcessSummary on candidateHP.JobCode equals jobsHP.JobCode 
       join job in _cempContexto.Vaga on jobsHP.JobCode equals job.Codigo 
       join candidateJob in _cempContexto.TrCandidatoVaga on new { X = job.Codigo, Y = candidateCode } equals new { X = candidateJob.VagaCodigo, Y = candidateJob.CandidatoCodigo } 
       where 
       candidateHP.CandidateCode == candidateCode 
       select 
       new 
       { 
       JobCode = jobsHP.JobCode, 
       CompanyCode = job.EmpresaCodigo, 
       Title = job.Titulo, 
       HasImage = true, 
       CompanyName = job.NomeEmpresa, 
       QuantityJobs = job.QuantidadeVaga, 
       Location = job.CidadeCodigo, 
       QuantityResumeSent = jobsHP.QuantityResumeSent, 
       JobStatusCode = jobsHP.StatusCode, 
       CandidateStatusCode = candidateHP.StatusCode, 
       StatusCode = job.StatusCodigo, 
       ResumeSentDate = candidateJob.Data, 
       InsertDate = job.DataDeCadastro, 
       EndDate = job.DataDeSaida, 
       city= _cempContexto.TrVagaCidade.SelectMany(p => _cempContexto.TrVagaCidade.Where(q => q.VagaCodigo == candidateHP.JobCode).Select(q => new { q })).ToList() 
       }) 
       .ToList(); 

私はそのサブクエリで街を記入する必要があります。私はそれをするためのより良い方法が必要です、どのように進めることができますか?

+0

ステップ1は、その恐ろしい匿名型を取り除くと、クラスにそれを回す取得することです。 – stybl

+0

モデルにナビゲーションプロパティが表示されないのはなぜですか?あなたが持っていれば、あなたのすべてのクエリは非常に簡単になります。 –

+0

最後に余分な '.Select'は何ですか? – NetMage

答えて

0

2つのクエリに分割コード:

var query = (from candidateHP in _cempContexto.CandidateHiringProcessSummary 
       join jobsHP in _cempContexto.JobHiringProcessSummary on candidateHP.JobCode equals jobsHP.JobCode 
       join job in _cempContexto.Vaga on jobsHP.JobCode equals job.Codigo 
       join candidateJob in _cempContexto.TrCandidatoVaga on new { X = job.Codigo, Y = candidateCode } equals new { X = candidateJob.VagaCodigo, Y = candidateJob.CandidatoCodigo } 
       where 
       candidateHP.CandidateCode == candidateCode 
       select 
       new 
       { jobsHP = jobsHP, job = job, candidateJob = candidateJob}).ToList(); 

var data = query.Select(x => new { 
       JobCode = x.jobsHP.JobCode, 
       CompanyCode = x.job.EmpresaCodigo, 
       Title = x.job.Titulo, 
       HasImage = true, 
       CompanyName = x.job.NomeEmpresa, 
       QuantityJobs = x.job.QuantidadeVaga, 
       Location = x.job.CidadeCodigo, 
       QuantityResumeSent = x.jobsHP.QuantityResumeSent, 
       JobStatusCode = x.jobsHP.StatusCode, 
       CandidateStatusCode = x.candidateHP.StatusCode, 
       StatusCode = x.job.StatusCodigo, 
       ResumeSentDate = x.candidateJob.Data, 
       InsertDate = x.job.DataDeCadastro, 
       EndDate = x.job.DataDeSaida, 
       city= query.Select(y => y.candidateHP.JobCode).Select(q => new { q })).ToList() 
       }) 
       .ToList(); 
+0

- >私は別の方法でこれを行いました。結果が似ていますリスト内のそれぞれのオープンおよびクローズ接続 –

+0

動作しましたか?あなたの望む結果を得るためにクエリを分割する例を挙げています。少し違うコードを実装した場合 – jdweng

+0

@jdeweng - >はい、あなたのコードは大丈夫ですが、すばらしいとは言えませんが、私はあなたの方法でeのためのオープンで緊密な接続のためにこの結果が得られたと思いますコンテンツのリスト内に行がありません。 –