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;
答案 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;