我有一个像
这样的清单 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}}
谢谢
答案 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);
这将返回Arrive
和Depart
相同的结果。
答案 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));