[英]Condition inside linQ Where condition
我有以下对象:
public class Result
{
public List<Recomendation> Recomendations { get; set; }
}
public class Recomendation
{
public List<Segment> Segments { get; set; }
}
public class Segment
{
public Leg OutBound { get; set; }
public Leg InBound { get; set; }
}
public class Leg
{
public TimeSpan TotalTime { get; set; }
public string Carrier { get; set; }
public int RefNumber { get; set; }
}
我有一个名为recommendations
的列表
我需要这样做:
Carrier
出现字符串arr
来过滤recommendations
,在出站或入站对象内。 我试过这样做: 单独搜索入站:
var filteredList = recommendations.Where( r=>r.Segments.Any(x => x.InBound.Carrier.Contains(arr))).ToList();
或单独搜索出站:
var filteredList = recommendations.Where( r=>r.Segments.Any(x => x.OutBound.Carrier.Contains(arr))).ToList();
我想在BOTH入站和出站中搜索字符串arr
的出现。
问题是有时InBound可以为null或OutBound可以为null。 我希望我的linQ可以在任何一种情况下工作。
当入站或出站为空时,您需要确保代码不会中断。
var filteredList = recommendations.Where( r=>r.Segments.Any(x => ( x.OutBound != null && x.OutBound.Carrier.Contains(arr)) || (x.Inbound != null && x.InBound.Carrier.Contains(arr))).ToList();
如果您使用的是C#6.0,则可以执行此操作:
var filteredList = recommendations.Where( r=>r.Segments.Any(x => x?.InBound.Carrier.Contains(arr)
|| x?.OutBound.Carrier.Contains(arr) ))
.ToList();
我不得不接受@raven的回答并对其进行修改。 这是解决方案:
var filteredList = recommendations.Where( r=>r.Segments.Any(x => ( x.OutBound != null && x.OutBound.Carrier.Contains(arr)) || (x.Inbound != null && x.InBound.Carrier.Contains(arr)))).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.