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