Dynamic Linq是否支持BindingList <t>?</t>

时间:2011-03-22 11:58:36

标签: .net-4.0 c#-4.0 linq-to-objects

问题

我正在尝试使用Microsoft的Dynamic Linq SampleBindingList<T>个对象。但看起来Dynamic Linq只适用于IQueryable。这里的交易是什么,为什么不BindingList<T>实施IQueryable。有没有办法解决这个问题?


背景细节:我有许多数据集需要在运行时动态过滤。这是一个例子:

BindingList<MyObject> list = new BindingList<MyObject>();
MyObject selectedObj = list.FirstOrDefault(o => o.Name == "Master P")

// then later ...
MyObject selectedObj = list.FirstOrDefault(o => o.City == "Boston")

我正在尝试将这些查询设置为动态,因此用户可以从查询中使用的MyObject的所有属性中进行选择。

1 个答案:

答案 0 :(得分:0)

BindingList上有一个Extension方法; AsQueryable已()。所以你可以使用

list.AsQueryable();

但是,如果要搜索所有条件,可以创建一个使用MyObject实例作为搜索条件的搜索,然后使用标准链接基于对象中的条件生成结果集。

例如:

public List<MyObject> Search(MyObject SearchCriteria)
    {
        BindingList<MyObject> list = new BindingList<MyObject>();
        list.Add(new MyObject("Test", "Boston"));
        list.Add(new MyObject("Test2", "Atlanta"));

        IEnumerable<MyObject> results = list.AsEnumerable();
        if (!String.IsNullOrEmpty(SearchCriteria.Name))
            results = results.Where(l => l.Name.Contains(SearchCriteria.Name));
        if (!String.IsNullOrEmpty(SearchCriteria.City))
            results = results.Where(l => l.City.Contains(SearchCriteria.City));
        return results.ToList();

    }

因此,在下文中,Results1将有2个结果,而结果2将只有1个。

List<MyObject> results1 = Search(new MyObject("Test", ""));
List<MyObject> results2 = Search(new MyObject("Test", "Boston"));

我在MyObject中使用了一个简单的结构作为例子:

public class MyObject
{
    public MyObject(string name, string city)
    {
        this.Name = name;
        this.City = city;
    }
    public string Name { get; set; }
    public string City { get; set; }
}