将double foreach转换为LinQ

时间:2016-09-23 13:04:20

标签: c# linq

foreach (var lg in basket)
{
    foreach (var acc in lg.Accomodations)
    {
        if (acc.HotelID == h.ID)
        {
            hotel.SelectedInPreviousLeg = true;
        }
    }
}

我尝试将这个双重foreach转换为linq。有什么建议? 到目前为止我试过这个,但是有一个编译错误。

var test = basket.FirstOrDefault(x => x.Accommodations, Any(y => y.HotelID == h.ID));
hotel.SelectedInPreviousLeg = (test != null) ? true : false;

1 个答案:

答案 0 :(得分:1)

或者,假设类被等效地定义为

=ARRAYFORMULA(sum(IF(IFERROR(SEARCH(A2, 'Dashboard Table'!A16:A),0), 1, 0))>0)

然后你可以这样做:

public class Hotel
{
    public int ID { get; set; }
    public List<Accomodation> Accomodations { get; set; }
    public bool SelectedInPreviousLeg {  get set; }
}

public class Accomodation
{
    public int HotelID { get; set; }
}

...但是当你只需要找到满足条件的第一个组合时,它会迭代所有组合,所以你可以这样做,这将在找到第一个之后停止:

foreach (var acc in
     from lg in basket
     from acc in lg.Accomodations
     where acc.HotelID == h.ID 
     select acc)
         hotel.SelectedInPreviousLeg = true;