繁体   English   中英

linQ内的条件哪里条件

[英]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();

看看Null条件运算符

我不得不接受@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM