首页 新闻 会员 周边

(反射)实体类值赋值给集合相应的值

0
悬赏园豆:10 [已解决问题] 解决于 2013-03-13 13:26

现有一个实体类Model,属性 及 值如下:

Model.F1=10;

Model.F2=20;

Model.F3=30;

Model.F9=30;

.......

Model.F50=40;

一共到F50。

==================================

另有一个集合List<Model2>,列名 及 值如下:

列名:Field  FieldValue  

  值:F1    null

    F2    null

    F3    null

请问怎么把实体类中的值赋值到相应的List集合中,使得集合中F1的值对应实体类中Model.F1的值,请大神帮忙

淘@淘的主页 淘@淘 | 小虾三级 | 园豆:602
提问于:2013-03-12 14:29
< >
分享
最佳答案
0

参考如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var model = new Model() { F1 = 10, F2 = 20 };
            var result = typeof(Model).GetProperties().Select(x => new { Field = x.Name, FieldValue = x.GetValue(model) }).ToList();
            foreach (var item in result)
            {
                Console.WriteLine("{0}:{1}", item.Field, item.FieldValue);
            }

            Console.Read();

        }
    }

    class Model
    {
        public int F1 { get; set; }
        public int F2 { get; set; }
    }
}

运行结果如下

收获园豆:10
陈希章 | 老鸟四级 |园豆:2538 | 2013-03-12 20:57

大侠我照你给我的例子写了,可是在我这报错,请你帮我看看这是怎么回事啊

淘@淘 | 园豆:602 (小虾三级) | 2013-03-13 09:02

@淘@淘: 不好意思大侠,我知道了

淘@淘 | 园豆:602 (小虾三级) | 2013-03-13 09:12

大侠我还想问你一个问题,我照着你的例子写了,把 item.Field, item.FieldValue这两个值以键值对的形式放到了SortedList里,代码如下:

SortedList<string, string> list = new SortedList<string, string>();
            var model_new = infoAssetsSub;
            var result = typeof(Model.Info_Assets_Sub).GetProperties().Select(x => new { Field = x.Name, FieldValue = x.GetValue(model_new, null) }).ToList();
            foreach (var item in result)
            {
                if (item.FieldValue != null && item.Field != "ID" && item.Field != "ParentID")
                {
                    list.Add(item.Field, item.FieldValue.ToString());
                }
            }

现在我有另一个实体类List,如下:

列名:  Field   FieldValue

   值:  F2    null
     F3    null
     F1    null

我怎么把SortedList中的相应值给这个List呢

淘@淘 | 园豆:602 (小虾三级) | 2013-03-13 10:18

@淘@淘: 其实如果你最终是要放在这个List里面去,就没有必要利用中间的SortList转一下吧

using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SortedList<string, string> source = new SortedList<string, string>();
            source.Add("F1", "10");
            source.Add("F1", "20");


            List<Model> target = new List<Model>();
            foreach (var item in source)
            {
                target.Add(new Model() { FieldName = item.Key, FieldValue = item.Value });
            }
        }

        class Model
        {
            public string FieldName { get; set; }
            public string FieldValue { get; set; }
        }
    }
}
陈希章 | 园豆:2538 (老鸟四级) | 2013-03-13 13:05

@陈希章: 不是,大侠是这样的:我的Model这个实体类里边不只有FieldName,FieldValue这两项,还有其他的,像ID,Time之类的,是从另一个表中查询出来的一个List集合,source去给集合中的target赋值,根据F1,F2.。。。

淘@淘 | 园豆:602 (小虾三级) | 2013-03-13 13:18

@陈希章: 不过,大侠我根据你给我的写出来了,谢谢你,我是这么写的

          foreach (var item in typeList)
            {
                foreach (var item2 in list)
                {
                    if (item.Field==item2.Key)
                    {
                        item.FieldValue = item2.Value;
                    }
                }
            }
淘@淘 | 园豆:602 (小虾三级) | 2013-03-13 13:25
其他回答(2)
0

试试看是不是可以在循环中判断list中的field name(属性名)与Model类实体中属性名相同,如果相同则赋值

获取属性名可以用到这个http://www.cnblogs.com/infixu/archive/2013/03/01/GetPropertyName.html

While蹒跚学步... | 园豆:59 (初学一级) | 2013-03-12 15:01

这种方法太麻烦了,有没有比较简单的,好点的方法啊

支持(0) 反对(0) 淘@淘 | 园豆:602 (小虾三级) | 2013-03-12 15:04

@淘@淘: 如果你F1到F90都是同一个类的对象,只能稍微简化一下,用foreach遍历model2 list, switch listitem的属性名, 然后case “F1” 将其值赋予Model.F1 ......

如果都是不同类的对象,直接用typeof(F1)判断就好了

其他的办法暂时想不到

支持(0) 反对(0) While蹒跚学步... | 园豆:59 (初学一级) | 2013-03-12 15:19

@While蹒跚学步...: typeof() ???? 能说具体点吗 ?我知道泛型可能能够实现,可是我不会,你会的话请告诉我

支持(0) 反对(0) 淘@淘 | 园豆:602 (小虾三级) | 2013-03-12 15:44
0
jason2013 | 园豆:1998 (小虾三级) | 2013-03-13 08:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册