首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于使用枚举集合进行筛选的动态linq表达式

用于使用枚举集合进行筛选的动态linq表达式
EN

Stack Overflow用户
提问于 2016-11-17 17:58:54
回答 3查看 752关注 0票数 0
代码语言:javascript
复制
public enum StoreType {
    Children = 1,
    Adult = 2,
    Farm = 3
}

如果我有一个这样的集合:

代码语言:javascript
复制
List<StoreType> enumCollection = new List<StoreType>{ StoreType.Children, StoreType.Farm };

我想构建动态linq表达式,这样我就可以遍历枚举类型来根据这些枚举过滤结果?

我想要实现的伪代码:

代码语言:javascript
复制
var enumFilter = LinqExpressionHelper.BuildEnumFilter(enumCollection);
    _storeRepository.GetStores.Where(enumFilter).ToList();

如何构建动态linq表达式,以便按枚举集合进行过滤?

EN

回答 3

Stack Overflow用户

发布于 2016-11-17 18:05:16

您可以在列表上执行Contains

代码语言:javascript
复制
_storeRepository.GetStores.Where(store => enumCollection.Contains(store.Type)).ToList();
票数 0
EN

Stack Overflow用户

发布于 2016-11-17 18:11:49

我不确定我明白你想要什么

代码语言:javascript
复制
List<StoreType> filters = new List<StoreType> { StoreType.Children, StoreType.Farm };
List<int> lstTofilter = new List<int>() { 1, 2, 3, 4, 5 };
var filteredList = lstTofilter.Where(i => !filters.Any(e => i.Equals((int)e))); //2, 4, 5

请记住将枚举转换为整数以检索它们的值

票数 0
EN

Stack Overflow用户

发布于 2016-11-17 18:17:57

我想这就是你想要的:

代码语言:javascript
复制
static class Program
{
    private static void Main(string[] args)
    {
        var enumCollection = new List<StoreType> { StoreType.Children, StoreType.Farm };

        var repo = new StoreRepository();

        var enumFilter = LinqExpressionHelper.BuildEnumFilter(enumCollection);
        var result  = repo.GetStores().Where(enumFilter).ToList();

        foreach (var store in result)
            Console.WriteLine($"Name={store.Name}, Type={store.StoreType}");

        Console.ReadKey();
    }
}

public enum StoreType
{
    Children = 1,
    Adult = 2,
    Farm = 3
}

public class StoreRepository
{
    public IEnumerable<Store> GetStores()
    {
        return new List<Store>
        {
            new Store {Name = "NewYork", StoreType = StoreType.Adult},
            new Store {Name = "RioDeJaneiro", StoreType = StoreType.Farm},
            new Store {Name = "Budapest", StoreType = StoreType.Children}
        };
    }
}

public class Store
{
    public string Name { get; set; }
    public StoreType StoreType { get; set; }
}

public static class LinqExpressionHelper
{
    public static Func<Store, bool> BuildEnumFilter(IEnumerable<StoreType> storeTypes)
    {
        return store => storeTypes.Contains(store.StoreType);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40651767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档