加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从动态列表中获取唯一的值列表

发布时间:2020-12-15 17:25:18 所属栏目:百科 来源:网络整理
导读:我有一个从数据库返回的动态对象列表,如下所示: IEnumerabledynamic list = _repository.All(whereClause); 然后,我需要对该列表执行的操作是获取数组中指定的每个列名的唯一值列表.所以像这样: Liststring columns = new string[] {"Col1","Col1"};foreac
我有一个从数据库返回的动态对象列表,如下所示:

IEnumerable<dynamic> list = _repository.All(whereClause);

然后,我需要对该列表执行的操作是获取数组中指定的每个列名的唯一值列表.所以像这样:

List<string> columns = new string[] {"Col1","Col1"};

foreach(string column in columns)
{ 
    //get unique value for column and add them to some collection 
    list.Select().Where(???)
}

因为列表是动态的,所以我不确定如何根据列名进行选择.

任何人都可以帮忙

解决方法

如何使用辅助类按名称动态访问属性(可以扩展为使用一些缓存):

public class ObjectUtils
{
    public static object GetPropertyByName(object obj,string name)
    {
        if (obj == null)
        {
            return null;
        }
        PropertyInfo propInfo = obj.GetType().GetProperty(name);
        if (propInfo == null)
        {
            return null;
        }
        object value = propInfo.GetValue(obj,null);
        return value;
    }
}

然后得到这样的数据:

List<dynamic> list = new List<dynamic>();
list.Add(new { Col1 = "AB",Col2 = 23 });
list.Add(new { Col1 = "CD",Col2 = 23 });
list.Add(new { Col1 = "AB",Col2 = 5 });
list.Add(new { Col1 = "EF",Col2 = 9 });

string[] columns = new string[] { "Col1","Col2" };
foreach (string column in columns)
{
    var elems = list.Select(d => ObjectUtils.GetPropertyByName(d,column)).Distinct().ToList();
    // elems will be "AB","CD","EF" for Col1
    //           and 23,5,9 for Col2
}

如果它不编译,请确保添加对Microsoft.CSharp的引用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读