我正在尝试创建一个扩展方法,我可以转发IList状态并检查它们存在的天气,我认为最好的方法是做一个ILIST - 但也许我错了?这是将多个项目传递给方法的最佳方法 - 列表吗?它是一个通用的LIST,因此没有来自Object的转换等。
基本上我将此作为签名。
public static IQueryable<Building> WithStatus(this IQueryable<Building> qry,
IList<BuildingStatuses> buildingStatus)
{
//PSUEDO CODE
//return from v in qry
// where v.Status is IN MY LIST called buildingStatus
// select v;
}
并且我使用它来调用它(下面的示例是在我的TDD中),它在我上面的方法中得到的值很大。
target.GetBuildings().WithStatus(new List<BuildingFilters.BuildingStatuses>()
{ BuildingFilters.BuildingStatuses.Available,
BuildingFilters.BuildingStatuses.Decommissioned });
所以基本上我有我的列表(IList)它到达扩展方法有2个值很好,但需要在LINQ中说我需要说
return from v in qry
where v.Status is IN MY LIST called buildingStatus
select v;
非常感谢任何帮助,
关于我的扩展方法,它的工作方式与我做过类似的1但只传递类型的BuildingStatus因此只有1 ...
答案 0 :(得分:5)
这对你有用吗?
return from v in qry
where buildingStatus.Contains(v.Status)
select v;
答案 1 :(得分:1)
您可以使用IEnumerable<T>.Contains
扩展方法,让您的方法更加通用:
public static IQueryable<Building> WithStatus(this IQueryable<Building> qry,
IEnumerable<BuildingStatuses> buildingStatus)
{
return from v in qry
where buildingStatus.Contains(v.Status)
select v;
}
答案 2 :(得分:1)
我认为建议的方法是正确的......您还应该记住IEnumerable<T>.Where
方法。