我有这种类型:
public partial class ReportTrafficDepartment
{
public int _id;
public System.Nullable<int> _siteNum;
public System.Nullable<System.DateTime> _dateReport;
public string _siteName;
public System.Nullable<int> _prog1;
public System.Nullable<int> _progLayout1;
public System.Nullable<int> _prog2;
}
这个功能:
private void setDate(IEnumerable<ReportTrafficDepartment> report, int year, int month)
{
report.Select(r => r.dateReport = new System.DateTime(year, month, 1));
}
如您所见,我尝试迭代ReportTrafficDepartment对象的集合并设置dateReport属性。
但是在执行方法之后,所有ReportTrafficDepartment对象的属性都为null。
我做错了什么?为什么所有ReportTrafficDepartment objets的属性都为null?
答案 0 :(得分:6)
不要这样做,使用linq来实现副作用通常是一个非常糟糕的主意。
你的问题是linq 是懒惰的,你没有迭代投影,因此永远不会发生任务。这是linq查询中副作用可能导致意外结果的原因之一。
如果你真的很想做到这一点,你必须让SetDate
重复Select
查询,急切地调用Count()
,ToList()
等。但同样,这是一个坏主意,只需使用foreach
块来执行此操作。