public Dictionary<Int64, XmlDocument> GetDatasetLatestMetadataVersions(Int64 structureId, bool includeCheckouts = false)
{
if (includeCheckouts) // the working copy versions of checked out datasets are also included
{
var q1 = DatasetVersionRepo.Query(p =>
(p.Dataset.DataStructure.Id == structureId)
&& (p.Dataset.Status == DatasetStatus.CheckedIn || p.Dataset.Status == DatasetStatus.CheckedOut)
&& (p.Status == DatasetVersionStatus.CheckedIn || p.Status == DatasetVersionStatus.CheckedOut)
).Select(p => new KeyValuePair<Int64, XmlDocument>(p.Dataset.Id, p.Metadata));
return (q1.ToList().ToDictionary(kvp => kvp.Key, kvp => kvp.Value));
}
else //just latest checked in versions or checked in datasets
{
var q1 = DatasetVersionRepo.Query(p =>
(p.Dataset.DataStructure.Id == structureId)
&& (p.Dataset.Status == DatasetStatus.CheckedIn || p.Dataset.Status == DatasetStatus.CheckedOut) // include checked in (latest) versions of currently checked out datasets
&& (p.Status == DatasetVersionStatus.CheckedIn)
).Select(p => new KeyValuePair<Int64, XmlDocument>(p.Dataset.Id, p.Metadata));
return (q1.ToList().ToDictionary(kvp => kvp.Key, kvp => kvp.Value));
}
//// it works using the timestamp technique
//var qu = (from dsv in DatasetVersionRepo.Get(p => p.Dataset.Status != DatasetStatus.Deleted)
// group dsv by dsv.Dataset.Id into grp
// let maxTimestamp = grp.Max(p => p.Timestamp)
// select grp.Single(p => p.Timestamp >= maxTimestamp).Metadata);
//return (qu.ToList());
}