2014-03-05 23 views
0

我有一个像列表<object>自我筛选

List<VoieData> listVoieData = new List<VoieData>(); 

和VoieData类名单,我有:

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

现在我soulution是这样的,但它不正确;

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

对不起,令人困惑的问题; 我想删除与列表中的所有Depart不同的到达,并返回新的 列表

它不仅在一个VoieData;

Arrive!=Depart 

感谢

+0

是否要删除所有'voieData',其中'到达!=出发',或所有那些'到达'不同于**所有** **所有**'voieData'的出发? –

+0

我们需要看看你在'listVoieData'中放入了什么,以便为你的示例输出开始,以表示对我们来说什么。没有输入的输出不是很有帮助。 – Servy

+0

@JuliánUrbano是的我想删除抵达与所有出发 – WickedFAN

回答

1

我想你想删除的所有对象,其中Arrive不在的任何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>效率。

1

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

类似:

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

然后有选择地只使用res.ToArray()运行查询和获取数组。

1

使用LINQ Where

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

这会返回结果其中两个ArriveDepart是相同的。

-1

既然你说你想:

我想删除到达其不同于所有的出发

这可以重新表述为,“集合所有的除了那些在一组出发的”,翻译非常漂亮成以下LINQ查询抵达:

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