【发布时间】:2019-07-29 08:28:15
【问题描述】:
我有拥有公寓字段的建筑实体。我只想过滤那些至少有一个公寓搜索模型的建筑物。
请求搜索模型 JSON:
{
........
"numberOfRooms": null,
"isStudio": true,
"isNoPlanning": true,
"isMultiRoom": true,
......
}
这是我的过滤逻辑
IEnumerable<Building> buildings = buildingApiDTO.Where(numberOfRooms => (searchModel.NumberOfRooms == null || numberOfRooms.Appartments.Any(roomsCount => searchModel.NumberOfRooms.Contains(roomsCount.RoomsCount.ToString())))
|| (searchModel.IsStudio == false || (searchModel.IsStudio == true && numberOfRooms.Appartments.Any(isStudio => isStudio.IsStudio)))
|| (searchModel.IsNoPlanning == false || (searchModel.IsNoPlanning == true && numberOfRooms.Appartments.Any(isNoPlanning => isNoPlanning.IsFreePlaning)))
|| (searchModel.IsMultiRoom == false || (searchModel.IsMultiRoom == true && numberOfRooms.Appartments.Any(multiRoom => multiRoom.RoomsCount >= 4))))
这些是我的实体。
public class Building
{
.....
public ICollection<Apartment> Apartments {get;set;}
.....
}
这是我的公寓课。
public class Apartment
{
public bool IsStudio {get;set;}
public bool IsFreePlaning {get;set;}
public bool IsMultiRoom {get;set;}
public int Roomscount {get;set;}
}
总的来说,我的过滤器逻辑无法正常工作。我也得到了没有工作室或没有平面公寓的建筑物。如何仅过滤只有一室公寓或多房间或免费平面公寓的建筑物?
【问题讨论】:
-
Linq 过滤器应该像这样使用。 IEnumerable.Where(x => x.Variable == State)
-
我不确定它是否与谓词构建器有关(添加一些带有条件的过滤器)。还是调试部分过滤器?
-
您是否尝试过将查询转换为带有 if 条件的循环?有时找出问题所在是有帮助的。通常错误使用
||,而&&应该是站立的
标签: c# .net linq asp.net-core