C# - 通过反射按属性排序

时间:2018-06-11 12:20:03

标签: c# linq reflection entity

我有一个数据库查询,提供 IQueryable 对象,其中 T 是匿名数据类型,如下所示:

>>> file_names = os.popen('find . -name "*%s*"' % criteria).read().split('\n')
>>>
>>>
>>> for file in file_names: print(file)
...
./pymp-0kz_4tay
./pymp-4zfymo3o
./pymp-k79d3tvz
./pymp-wq9g900h

现在我想通过 Note 的不同属性(例如 Note.Title )对此进行排序,但我的 Note 类可以包含大量的不同的属性。用作排序元素的属性可以在外部更改,有关使用哪个属性的信息我将作为简单字符串接收。目前我正在使用 switch-case 语句来评估收到的字符串,然后选择适当的属性进行排序:

var baseListQuery = (<...> select new {
    note = n, // class Note
    triggers = grp // class Trigger
})

但是,我想知道是否有可能以更一般的方式使用反射?我想检查注意是否包含具有接收字符串名称的属性,如果是,请对结果进行适当排序。我尝试过这样的事情:

switch(SortBy) {
    ...
    case "Title": baseListQuery = baseListQuery.OrderBy(p => p.note.Title); break;
    ...
}

在调用示例 baseListQuery.Count()时会引发异常:

var baseQueryType = baseListQuery.GetType();
var member = (baseQueryType.GetGenericArguments()[0]).GetProperty("note");
var member2 = member.PropertyType.GetProperty("Title"); // I would like to use GetProperty(SortBy);
baseListQuery = baseListQuery.OrderBy(p => member2);

是否有可能通过反思来做到这一点,如果是这样,有人可以解释我,我做错了什么?

0 个答案:

没有答案