现有一个实体类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的值,请大神帮忙
参考如下代码
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; } } }
运行结果如下
大侠我照你给我的例子写了,可是在我这报错,请你帮我看看这是怎么回事啊
@淘@淘: 不好意思大侠,我知道了
大侠我还想问你一个问题,我照着你的例子写了,把 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呢
@淘@淘: 其实如果你最终是要放在这个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; } } } }
@陈希章: 不是,大侠是这样的:我的Model这个实体类里边不只有FieldName,FieldValue这两项,还有其他的,像ID,Time之类的,是从另一个表中查询出来的一个List集合,source去给集合中的target赋值,根据F1,F2.。。。
@陈希章: 不过,大侠我根据你给我的写出来了,谢谢你,我是这么写的
foreach (var item in typeList) { foreach (var item2 in list) { if (item.Field==item2.Key) { item.FieldValue = item2.Value; } } }
试试看是不是可以在循环中判断list中的field name(属性名)与Model类实体中属性名相同,如果相同则赋值
获取属性名可以用到这个http://www.cnblogs.com/infixu/archive/2013/03/01/GetPropertyName.html
这种方法太麻烦了,有没有比较简单的,好点的方法啊
@淘@淘: 如果你F1到F90都是同一个类的对象,只能稍微简化一下,用foreach遍历model2 list, switch listitem的属性名, 然后case “F1” 将其值赋予Model.F1 ......
如果都是不同类的对象,直接用typeof(F1)判断就好了
其他的办法暂时想不到
@While蹒跚学步...: typeof() ???? 能说具体点吗 ?我知道泛型可能能够实现,可是我不会,你会的话请告诉我