puedo obtener una mano convirtiendo lo siguiente en una instrucción LINQ.Convertir una instrucción SQL en LINQ-To-SQL
SELECT reports.* FROM [dbo].[ReportLists] rl
INNER JOIN [dbo].[ReportItems] ri ON rl.Id = ri.ReportListId
INNER JOIN [dbo].[Reports] reports ON ri.Id = reports.ReportItemId
WHERE
reports.createdDate
IN (
SELECT
MAX(report_max_dates.createdDate)
FROM
[dbo].[Reports] report_max_dates
GROUP BY
report_max_dates.seedLot
)
En este momento tengo que reduce a esto:
db.ReportLists.Select(rl => db.ReportItems
.Where(ri => ri.ReportListId == rl.Id)
.Select(ri => db.Reports
.Where(r => r.ReportItemId == ri.Id)
.GroupBy(r => new { r.seedLot })
.Select(g => g.OrderByDescending(x => x.createdDate).FirstOrDefault())));
El problema con el anterior es LINQ que devuelve las entradas que tienen títulos cambiados. Dentro de la base de datos guardo el historial de todos los registros (de ahí la necesidad de que el primero en el orden creado Fecha de descenso. Cuando cambio un informe del título x al título y, aparece en ambos títulos cuando solo quiero el registro más reciente que por lo tanto, ser el que, bajo el título y.
eDITAR lo siento por la falta de detalles. tengo una tabla informes que contiene información sobre el informe (lote de semillas de ser un identificador). Siempre que un informe es editado, un nuevo récord se inserta (frente a la actualización del anterior) para que se guarde el historial. En este caso, la entrada máxima para el Fecha de creación indica que el informe es el registro más reciente que se mostrará. Los informes se agrupan en títulos o Artículos de informe. mantenga el título y los informes asociados. Estos artículos de informe se guardan en una Lista de en I puede imprimir el JSON en un formato deseado y solo contiene una columna de estado y una identificación vinculadas por ReportItems.
En el caso de que un informe se traslade del título a al título b, se ingresa un nuevo registro con la clave externa del título que enlaza con el título al que se cambió. Cuando esto sucede, el LINQ indicado anteriormente devuelve el registro en cada ReportItem individual cuando solo debe devolver la entrada más nueva para el título b (del ejemplo anterior). Aparte de esto, la instrucción LINQ solo devuelve el registro más reciente para createdDate.
Éstos son mis estructuras de clase (que imitan la estructura DB así)
public class ReportList {
public int Id {get;set;}
public string status {get;set;}
public List<ReportItem> {get;set;}
}
public class ReportItem {
public int Id {get;set}
public string title {get;set;}
public List<Report> {get;set;}
}
public class Report {
public int Id {get;set;}
public string Lot {get;set;}
... Other data ...
public DateTime createdDate {get;set;}
}
Gracias, Dman
¿Estoy en lo correcto al entender que seed_lot es lo que diferencia los informes verdaderamente distintos de los otros * y * informes que han encontrado un cambio de nombre? Es decir, en lo que se refiere a report_max_dates, ¿un informe renombrado no es diferente de informes verdaderamente distintos (no relacionados)? –
Por favor, brinde más detalles. Explica lo que quieres Es difícil inferir eso a partir de un fragmento de SQL y una consulta de linq defectuosa. Y explica cómo se mantienen juntas las diversas versiones de un informe. –
Me parece que necesita recorrer una cadena de registros de actualización para obtener la * última * versión de un informe basado en su seed_lot en la encarnación, lo que puede hacer que la versión LINQ de esto (¿mucho?) Sea más difícil de lo que parece inicialmente . –