C# 如何基于多个条件删除列表中的多个项目
我有这些对象的C# 如何基于多个条件删除列表中的多个项目,c#,linq,C#,Linq,我有这些对象的列表: public class DutyAssignmentEntry { private string _Date; private string _Week; private int _Template; private AssignmentMode _Mode; private List<Assignment> _Assignments; [XmlAttribute] public string Date
列表
:
public class DutyAssignmentEntry
{
private string _Date;
private string _Week;
private int _Template;
private AssignmentMode _Mode;
private List<Assignment> _Assignments;
[XmlAttribute]
public string Date
{
get => _Date; set => _Date = value;
}
[XmlAttribute]
public string Week
{
get => _Week; set => _Week = value;
}
[XmlAttribute]
public int Template
{
get => _Template; set => _Template = value;
}
[XmlAttribute]
public AssignmentMode Mode
{
get => _Mode; set => _Mode = value;
}
[XmlElement]
public List<Assignment> Assignments
{
get => _Assignments; set => _Assignments = value;
}
[XmlIgnore]
public string Key
{
get => _Template + "_" + _Date;
}
public DutyAssignmentEntry()
{
_Date = "";
_Week = "";
_Template = 0;
_Mode = AssignmentMode.Weekly;
_Assignments = new List<Assignment>();
}
public DateTime ToDate()
{
int iYear = Convert.ToInt32(Date.Substring(1, 4));
int iMonth = Convert.ToInt32(Date.Substring(5, 2));
int iDate = Convert.ToInt32(Date.Substring(7, 2));
return new DateTime(iYear, iMonth, iDate);
}
}
新方法:
public void DeleteDutyHistoryAssignments(DateTime datStart, DateTime datEnd, long lTemplate)
{
// Fancy way to remove all the items in the list where
// item.ToDate() >= datStart.Date and
// item.ToDate() <= datEnd.Date and
// item.Template = lTemplate
}
public void deleteDutyHistoryaSignatures(日期时间datStart、日期时间datEnd、长lTemplate)
{
//删除列表中所有项目的奇特方法
//item.ToDate()>=datStart.Date和
//item.ToDate()您可以使用List
方法:
\u DutyAssignment.RemoveAll(x=>
x、 ToDate()>=datStart.Date&&
x、 托德()稍微有点长,但是Date
应该是DateTime
,而不是String
。重复这样解析字符串不是一个好主意。使用LINQ Where或多个链式Where来筛选列表。谷歌搜索很容易,有一百万个示例。或者编写循环。您需要帮助编写循环,还是需要帮助比较日期?如果您已经可以使用迭代进行比较,那么这有什么错?LINQ只会在封面下进行同样的操作。请注意,在修改集合时,向后迭代的for
循环是最干净的。在使用foreach
或LINQ枚举集合时,您不能修改集合,尽管您可以创建一个新集合中的任意一个。@andrewruckle这不是一个很好的理由。@EdPlunkett甚至更好。我找到了如何直接支持DateTime变量和XML序列化等。一切都很好。:)
public void DeleteDutyHistoryAssignments(DateTime datStart, DateTime datEnd, long lTemplate)
{
// Fancy way to remove all the items in the list where
// item.ToDate() >= datStart.Date and
// item.ToDate() <= datEnd.Date and
// item.Template = lTemplate
}
_DutyAssignment.RemoveAll(x =>
x.ToDate() >= datStart.Date &&
x.ToDate() <= datEnd.Date &&
x.Template == lTemplate
);