最大值LINQ使用类

时间:2015-10-07 05:54:27

标签: linq c#-4.0

我有这门课

public class Materiale
{
    public string IdMateriale { get; set; }
    public string GenereMateriale { get; set; }
    public string Categoria { get; set; }
    public string Modello { get; set; }
    public string Tipo { get; set; }
    public string NumSerie { get; set; }
    public int Anno { get; set; }
    public string DittaCostruttrice { get; set; }
    public string Note { get; set; }
    public List<Controllo> Controlli = new List<Controllo>();
}

public class Controllo
{
    public string IdControllo { get; set; }
    public DateTime DataControllo { get; set; }
    public string IdMateriale { get; set; }
    public string Utente { get; set; }
    public string Stato { get; set; }
    public string Note { get; set; }
}

我想查询“Materiale”过滤“Controlli”列表。我需要检索“Materiale”类的所有属性,并且只检索“Controllo”类的一个属性(名为“Stato”的属性)。从“Controlli”列表中我需要具有最新“DataControllo”属性的那个。

我在LINQ查询中尝试此操作,但收到错误(当前上下文中不存在Max

List<Materiale> m = new List<Materiale>();

List<Materiale> m2 = (from ma in m
                      from c in ma.Controlli
                      where c.DataControllo == Max(c.DataControllo)                                  
                      select new
                      {
                           ma, c.Stato
                      }).ToList();

有人可以帮助我

2 个答案:

答案 0 :(得分:1)

我认为你需要更简单的东西,如下所示:

List<Materiale> m2 = from ma in m
                     let mostRecentControllo = ma.Controlli 
                                                 .OrderByDescending(c=>c.DataControllo)
                                                 .FirstOrDefault()
                     select new
                     {
                         Materiale = ma, 
                         Stato = mostRecentControllo != null
                                ? mostRecentControllo.Stato : null
                     }).ToList();

我认为每个Materiale Controlli列表都包含Controllo IdMateriale

答案 1 :(得分:1)

@Christos是正确的,这是我在查询语法中使用let的版本: -

List<Materiale> m2 = from m in MaterialeList
                     let RecentControllo = m.OrderByDescending(x => x.DataControllo)
                                            .FirstOrDefault()
                     select new Materiale
                     {
                         IdMateriale = m.IdMateriale,
                         GenereMateriale = m.GenereMateriale,
                         //Similarily other properties of  Materiale here
                         Stato = RecentControllo != null ? RecentControllo.Stato : ""
                     }).ToList();