过滤列表并删除不需要的数据C#

时间:2018-08-15 09:14:01

标签: c#

我有一个list的用户timespan,出于参数考虑,我们假设一个月。因此,在list中,某些用户不符合我为特定目标所希望的条件,因此我想过滤出list并将过滤出的数据显示到另一个list中。因此,我如何复制list如下:

List<tblList1> List1 = new XPQuery<tblList1>(session)
    .Where(w => w.UserCode != null).ToList();

然后,我使用foreach循环遍历此列表,将数据与我的条件进行比较,然后将它们添加到运行良好的新列表中。我现在遇到的问题是删除我从第一个list中获取的数据。我在创建的新方法中尝试了以下方法:

public void DeleteData(Session session)
{
    List<tblList1> List1= new XPQuery<tblList1>(session)
        .Where(w => w.UserID != null).ToList();

    List<tblList2> List2= new XPQuery<tblList2>(session)
        .Where(w => w.UserID!= null).ToList();

    List1.RemoveAll(w => w.UserID == List2.Any(e => e.UserID== w.UserID));
}

因此,最后我想删除list1中的所有数据,以便我们可以查看list2中已删除的数据。如果我能使正确的RemoveAll LINQ语句正确,因为当前行不起作用,并且不确定如何在LINQ中处理此问题,将对您有所帮助。

2 个答案:

答案 0 :(得分:3)

据我所看到的评论:

  

我想将List1 {1、2、3}与标准进行比较,看看{   2}不符合该条件,请在List2中添加。然后删除{2   }来自List1

我完全看不到 Linq 中的任何需求。让我们同时填写两个列表:

List<tblList1> List1 = new List<tblList1>();
//TODO: please, check types; it seems that it should be List<tblList1> List2
List<tblList2> List2 = new List<tblList2>();

foreach (var item in new XPQuery<tblList1>(session).Where(w => w.UserID != null)) {
  if (YourCriteriaHere)
    List1.Add(item); // <- Criteria met: add to List1 
  else
    List2.Add(item); // <- Doesn't meet: "delete" from (just not add to) List1 into List2 
}

答案 1 :(得分:1)

您可以只使用LINQ Where来过滤列表,然后使用Except来获得未过滤的值:

List<Item> all = ...; // your original list
List<Item> matching = all.Where(x => IsMatching(x)).ToList(); // IsMatching is any filtering logic
List<Item> notMatching = all.Except(matching).ToList();