none
Linq查询想关. RRS feed

  • 问题

  • 有一个集合要做Linq的查询.

     

    myList.Where(s => myFilters.Contains(s.CountryCode))

     

    其中s.CountryCode 我想做成动态可变的参数。 例如下面这样的

     

    myList.Where(s => myFilters.Contains(s.City))

    myList.Where(s => myFilters.Contains(s.Region))

    myList.Where(s => myFilters.Contains(s.Zipcode)).

     

    我想做这样的一个函数。请问可以用什么方法来实现啊?

     

    public void MySelect( ??? )

    {  

    myList.Where(s => myFilters.Contains(???);

    }

     


    • 已编辑 feige000 2016年2月14日 14:30
    2016年2月13日 14:43

答案

  • 你好,

    可以通过扩展方法来做:

    public static IEnumerable<T> WhereContains<T, TValue> (this IEnumerable<T> obj, IEnumerable<TValue> container, Func<T, TValue> propertyAccess)
    {
        return obj.Where(o => container.Contains(propertyAccess(o)));
    }

    这是一个IEnumerable<T>的扩展方法,使用如下:

    var myList = new List<Test>{
        new Test() { City = "asdf", Region = "fdsa" },
        new Test() { City = "foo", Region = "bar" },
        new Test() { City = "bar", Region = "baz" }
    };
    
    var myFilters = new List<string> { "asdf", "bar" };
    
    myList.WhereContains(myFilters, x => x.City); 
    myList.WhereContains(myFilters, x => x.Region); 

    Best regards,

    Cole Wu

    2016年2月14日 14:43
    版主