如何在c#中使用动态属性选择过滤列表?

时间:2016-04-27 13:00:21

标签: c#-4.0 reflection

我需要使用动态属性选择过滤集合。

示例:

public class NotificationListModel : Observable
{ 
    private string _QMTXT;

    public string QMTXT
    {
        get { return _QMTXT; }
        set { _QMTXT = value; RaisePropertyChanged("QMTXT"); }
    }
    private string _PRIOK;

    public string PRIOK
    {
        get { return _PRIOK; }
        set { _PRIOK = value; RaisePropertyChanged("PRIOK"); }
    }
    private string _ARBPL;

    public string ARBPL
    {
        get { return _ARBPL; }
        set { _ARBPL = value; RaisePropertyChanged("ARBPL"); }
    }
    private string _id;

    public string id
    {
        get { return _id; }
        set { _id = value; RaisePropertyChanged("id"); }
    }

}

我有一个集合NotificationCollection,有几个记录,所以我需要使用不同的属性过滤这个集合,这些不是像下面那样修复的,

示例1:

var Result =  NotificationCollection.Where(w =>(w.QMTXT=="1" || w.QMTXT=="2") && w.PRIOK == "1").ToList();

例2:

 var Result =  NotificationCollection.Where(w =>w.id=="1" && w.PRIOK == "1").ToList();

这里,虽然过滤列表属性将是动态的,但它可以使用QMTXT或PRIOK或QMTXT和PRIOK的组合以及一些其他属性进行过滤。 我怎样才能实现它。 我做了很多研究,我知道我们可以通过使用反射来做到这一点,但我没有那么多的反射范围。

你的帮助非常明显。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

System.Linq.Dynamic可能适合您:https://dynamiclinq.codeplex.com/documentation 我最近通过Linq与ORDER BY语句有类似的问题。使用Linq.Dynamic可以更改字段的顺序和每个字段的条件。