하위 쿼리를 사용하여 SQL 쿼리를 변환하는 방법을 선택합니다.NET Core 쿼리
다음 SQL 기본 쿼리가 있습니다.
select
a.id_agente,
a.alias,
a.direccion,
cd.description,
( select te.data
from tevento te
left join tagente ta on ta.id_agente = te.id_agente
where ta.id_agente = a.id_agente order by timestamp desc limit 1
) as data
from tagente a
left join tagent_custom_data cd on a.id_agente = cd.id_agent
where cd.id_field = 6 and cd.description = $VAR;
컨트롤러의 .net core에 다음과 같은 쿼리가 있습니다.
[HttpGet]
public ActionResult<string> GetAgentesByPlanta(string idPlanta)
{
using (var db = new MyContext())
{
List<Object> lst = new List<Object>();
var q =
from a in db.Agente
join cd in db.CustomData on a.id_agente equals cd.id_agent
where ((cd.id_field == 6) & (cd.description == idPlanta))
select new { Agente = a, CustomData = cd };
foreach (var x in q)
{
lst.Add(new {
id_agente=x.Agente.id_agente,
nombre=x.Agente.nombre,
direccion=x.Agente.direccion,
alias=x.Agente.alias,
ultimo_contacto=x.Agente.ultimo_contacto
});
}
dynamic response = lst;
return Ok(response);
}
}
이 컨트롤러는 json으로 응답하고 작동합니다.그러나 보다시피 select의 하위 쿼리가 누락되었습니다.
◦여기에 하위 쿼리를 추가하려면 어떻게 해야 합니까?NET Core 쿼리?
샘플에 대한 @baqilare 답변을 조금 수정하려면 여기에서 EagerLoading을 사용할 수 있습니다.
var q = from a in db.Agente
join cd in db.CustomData on a.id_agente equals cd.id_agent
join te in db.Evento.AsQueryable().Include(x=>x.Agente) on
te.Agente.id_agente == a.id_agente
where ((cd.id_field == 6) && (cd.description == idConvert))
select new {
Agente = a,
CustomData = cd,
Evento =te.OrderByDescending(x=>x.timestamp).FirstOrDefault()
};
여기서 다시 타임스탬프가 어떤 테이블에 있는지 모르겠습니다 + 현재 코드보다 더 최적화되었지만 많이 개선될 수 있습니다... efcore를 사용하는 간단한 조언입니다. 시스템이 필요할 수 있는 리포지토리 패턴을 사용하도록 항상 조언하겠습니다.Linq 네임스페이스도
또한 efcore에서 엄격하지 않다면 sp를 사용할 수 있고 efcore를 통해 실행할 수 있습니다. 이 경우와 같은 쿼리에 더 적합합니다.
저는 마침내 이 의문을 다음과 같은 방법으로 해결했습니다.
var q =
from a in db.Agente
join cd in db.CustomData on a.id_agente equals cd.id_agent
where ((cd.id_field == 6) && (cd.description == idConvert))
select new {
Agente = a,
CustomData = cd,
Evento = (from te in db.Evento
join ta in db.Agente on te.id_agente equals ta.id_agente
where ta.id_agente == a.id_agente
orderby te.timestamp descending
select new {Evento = te}).First()
};
foreach (var x in q)
{
lst.Add(new {
id_agente=x.Agente.id_agente,
nombre=x.Agente.nombre,
direccion=x.Agente.direccion,
alias=x.Agente.alias,
ultimo_contacto=x.Agente.ultimo_contacto,
data=x.Evento.Evento.data,
ultimo_data=x.Evento.Evento.timestamp
});
}
언급URL : https://stackoverflow.com/questions/58483103/how-to-translate-a-sql-query-with-subquery-in-select-to-net-core-query
'source' 카테고리의 다른 글
쿼리를 사용하여 VIEW ddl 가져오기 (0) | 2023.07.24 |
---|---|
Android에서 날짜와 시간을 포맷하는 방법은 무엇입니까? (0) | 2023.07.24 |
JavaScript 문서입니다.AJAX를 사용할 경우 Write가 모든 본문 컨텐츠를 대체합니다. (0) | 2023.07.24 |
Oracle: 하나의 필드를 업데이트하는 동안 행 복사 (0) | 2023.07.24 |
FlatButton 클릭 시 AlertDialog를 해제하는 방법은 무엇입니까? (0) | 2023.07.19 |