LINQ группа с включенной таблицей - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу сгруппировать по полям в tblInspection и выбрать самую последнюю InspectionDate в tblInspectionDate, но я не знаю, как ссылаться на поле в таблице «Включено».

public IEnumerable<InspectionEvent> GetInspectionEvents() //string facilityID)
    {
        using (var context = new FacilityEntities())
        {
            var inspections = context.tblInspection.AsNoTracking().Include("tblInspectionDate");
            List<InspectionEvent> inspectionList =
                (from insp in inspections
                     group insp by new { insp.InspectionID, insp.Inspection, insp.Inspector, insp.FacilityID, insp.InventoryID, insp.Period }  
                     into g
                         select new InspectionEvent
                         {
                             InspectionID = g.Key.InspectionID,
                             InspectionName = g.Key.Inspection,
                             Inspector = g.Key.Inspector,
                             FacilityID = g.Key.FacilityID,
                             InventoryID = g.Key.InventoryID,
                             Period = g.Key.Period,
                             InspectionDate = g.Max(x => x.tblInspectionDate.InspectionDate? something like this?)
                         }).ToList();
            return inspectionList;
        }
    }

Вот tblInspectionкласс:

public partial class tblInspection
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public tblInspection()
    {
        this.tblInspectionDate = new HashSet<tblInspectionDate>();
    }

    public int InspectionID { get; set; }
    public string Inspection { get; set; }
    public string Inspector { get; set; }
    public Nullable<int> FacilityID { get; set; }
    public Nullable<int> InventoryID { get; set; }
    public string Period { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<tblInspectionDate> tblInspectionDate { get; set; }
}

И класс tblInspectionDate:

public partial class tblInspectionDate
{
    public int InspectionID { get; set; }
    public System.DateTime InspectionDate { get; set; }
    public int UserID { get; set; }

    public virtual tblInspection tblInspection { get; set; }
    public virtual tblUser tblUser { get; set; }
}

1 Ответ

0 голосов
/ 28 декабря 2018

Вам не нужно группировать.Я думаю, можно с уверенностью предположить, что InspectionID является первичным ключом Inspection, поэтому группа всегда содержит один Inspection, что делает группировку бессмысленной.То, что вы хотите, может быть относительно просто запрошено:

from insp in inspections
select new InspectionEvent
{
    InspectionID = insp.InspectionID,
    InspectionName = insp.Inspection,
    Inspector = insp.Inspector,
    FacilityID = insp.FacilityID,
    InventoryID = insp.InventoryID,
    Period = insp.Period,
    InspectionDate = (DateTime?)insp.tblInspectionDate.Max(d => d.InspectionDate)
}

Приведение к DateTime? должно учитывать проверки без каких-либо tblInspectionDate.

Примечание: удалите эти утомительные tbl префиксы из имен классов и свойств и используют множественные имена для коллекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...