Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用类的最大值LINQ_Linq_C# 4.0 - Fatal编程技术网

使用类的最大值LINQ

使用类的最大值LINQ,linq,c#-4.0,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; } publ

我有这门课

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; }
}

有人能帮我吗?我想你需要一些更简单的东西,比如下面这个:

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();
列表m2=从ma开始,单位为m
设mostRecentControllo=ma.Controlli
.OrderByDescending(c=>c.DataControllo)
.FirstOrDefault()
选择新的
{
材料=毫安,
Stato=mostRecentControllo!=null
?MOSTrecentControll.Stato:空
}).ToList();

我假设每个
Materiale
Controlli
列表都包含
Controllo
和相同的
IdMateriale

@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();
列表m2=材料列表中的m
让RecentControllo=m.OrderByDescending(x=>x.DataControllo)
.FirstOrDefault()
选择新材料
{
IdMateriale=m.IdMateriale,
GenereMateriale=m.GenereMateriale,
//与此类似,此处材料的其他特性
Stato=RecentControllo!=null?RecentControllo.Stato:“
}).ToList();

OP想要
Stato
类中的
Controllo
属性。@Christos非常感谢您的假设正确。我尝试您的代码编译器在c.Stato上给我一个错误(无法隐式地将类型'string'转换为'bool')@BrunoRigoni不客气。你说得对。我的错误。在
FirstOrDefault
中,我们只能传递谓词,即返回布尔值的表达式。我错了,我纠正了它。聚合比按OrderBy/先执行要好
let mostRecentControllo=ma.Controlli.Aggregate((当前,下一个)=>current.DataControllo>next.DataControllo?current:next)
@BrunoRigoni不客气:)我很高兴我帮了忙。对于
let
的使用,我做了完美的修改。(+1)@Rahul Singh谢谢
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();