LINQ:检查字段(db)是否包含ILIST中的项目?

时间:2009-10-14 12:50:50

标签: c# linq linq-to-sql extension-methods

我正在尝试创建一个扩展方法,我可以转发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 ...

3 个答案:

答案 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方法。

http://msdn.microsoft.com/en-us/library/bb910023.aspx