Je ne sais pas exactement ce que vous recherchez, mais ce programme:
    public class Building
    {
        public enum StatusType
        {
            open,
            closed,
            weird,
        };
        public string Name { get; set; }
        public StatusType Status { get; set; }
    }
    public static List <Building> buildingList = new List<Building> ()
    {
        new Building () { Name = "one", Status = Building.StatusType.open },
        new Building () { Name = "two", Status = Building.StatusType.closed },
        new Building () { Name = "three", Status = Building.StatusType.weird },
        new Building () { Name = "four", Status = Building.StatusType.open },
        new Building () { Name = "five", Status = Building.StatusType.closed },
        new Building () { Name = "six", Status = Building.StatusType.weird },
    };
    static void Main (string [] args)
    {
        var statusList = new List<Building.StatusType> () { Building.StatusType.open, Building.StatusType.closed };
        var q = from building in buildingList
                where statusList.Contains (building.Status)
                select building;
        foreach ( var b in q )
            Console.WriteLine ("{0}: {1}", b.Name, b.Status);
    }
produit le résultat attendu: 
one: open
two: closed
four: open
five: closed
Ce programme compare une représentation sous forme de chaîne de l'énumération et produit la même sortie:
    public class Building
    {
        public enum StatusType
        {
            open,
            closed,
            weird,
        };
        public string Name { get; set; }
        public string Status { get; set; }
    }
    public static List <Building> buildingList = new List<Building> ()
    {
        new Building () { Name = "one", Status = "open" },
        new Building () { Name = "two", Status = "closed" },
        new Building () { Name = "three", Status = "weird" },
        new Building () { Name = "four", Status = "open" },
        new Building () { Name = "five", Status = "closed" },
        new Building () { Name = "six", Status = "weird" },
    };
    static void Main (string [] args)
    {
        var statusList = new List<Building.StatusType> () { Building.StatusType.open, Building.StatusType.closed };
        var statusStringList = statusList.ConvertAll <string> (st => st.ToString ());
        var q = from building in buildingList
                where statusStringList.Contains (building.Status)
                select building;
        foreach ( var b in q )
            Console.WriteLine ("{0}: {1}", b.Name, b.Status);
        Console.ReadKey ();
    }
J'ai créé cette méthode d'extension pour convertir un IEnumerable en un autre, mais je ne suis pas sûr de son efficacité; il peut simplement créer une liste dans les coulisses.
public static IEnumerable <TResult> ConvertEach (IEnumerable <TSource> sources, Func <TSource,TResult> convert)
{
    foreach ( TSource source in sources )
        yield return convert (source);
}
Ensuite, vous pouvez modifier la clause where en:
where statusList.ConvertEach <string> (status => status.GetCharValue()).
    Contains (v.Status)
et ignorez la création du List<string>avec ConvertAll ()au début.
               
              
Contains()méthode sur Terre , puis je me rends compte que c'est censé l'être à laAny()place. +1