列出<object>自我过滤器</object>

时间:2014-03-05 16:33:43

标签: c# linq

我有一个像

这样的清单
 List<VoieData> listVoieData = new List<VoieData>();

在VoieData Class中我有:

public class VoieData
{
    public int Depart { set; get; }
    public int Arrive { set; get; }
    public int DistanceDepart { set; get; }
    public int DistanceArrive { set; get; }
}

由于我有大量的值,我想只考虑我的所有Depart号码,我想通过查找listVoieData只有与Arrive相同的值来过滤Depart listVoieData.Select(p=>p.Depart).ToList()= List<int>{1,2,3}; listVoieData.Select(p=>p.Arrive).ToList()= List<int>{1,2,3,4,5};

例如我有

VoieData

我需要丢弃包含{4,5} Arrive

的整个List<VoieData> listVoieDataFilter = listVoieData .Join(listVoieData , o1 => o1.Arrive, o2 => o2.Depart, (o1, o2) => o1).ToList();

现在我的洗礼就是这样,但这不正确;

VoieData

抱歉这个令人困惑的问题;   我想删除与列表列表中的所有Depart不同的Arrive,并返回新的     列表

不只是在一个Arrive!=Depart ;

{{1}}

谢谢

4 个答案:

答案 0 :(得分:1)

这将是使用linq的典型案例。

类似的东西:

var res = from data in listVoieData
          where data.Depart == data.Arrive
          select data;

然后可选择使用res.ToArray()来运行查询并获取数组。

答案 1 :(得分:1)

使用LINQ Where

var records = listVoieData.Where(x => x.Arrive == x.Depart);

这将返回ArriveDepart相同的结果。

答案 2 :(得分:1)

我认为您要从任何对象中移除Arrive中<{1}}不在任何 Depart的所有对象。在这种情况下,首先获取所有Depart,然后按Arrive过滤:

HashSet<int> allDepart = new HashSet<int>(listVoieData.Select(x => x.Depart));
var result = listVoieData.Where(v => !allDepart.Contains(v.Arrive))

我们使用HashSet<int>来提高效率。

答案 3 :(得分:-1)

既然你说过你想要的话:

  

我想删除与所有Depart不同的Arrive

这可以重新表述为“所有到达的集合,除了离开集合中的那些”,这非常好地转换为以下LINQ查询:

var arrivalsWithNoDepartures = listVoieData.Select(p=>p.Arrive)
    .Except(listVoieData.Select(p=>p.Depart));