使用类的最大值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();