我有一个
List<object> list = new List<object>();
while (myReader.Read())
{
string arrKablan = myReader["arrK_Title"].ToString();
string arrTotal = myReader["arrTotal"].ToString();
string _title = myReader["MF_Title"].ToString();
string _path = myReader["MF_Path"].ToString();
int _level = Convert.ToInt32(myReader["MF_Level"].ToString());
list.Add(new { title = _title, path = _path, kablanim = arrKablan, total = arrTotal, level = _level });
}
我只需要选择 level == 1 的项目
我试过了
list = list.where(item => item.level == 1);
但是我得到一个错误
'object' does not contain a definition for 'level' and no extension method 'level' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
我知道编译器可以获得类型,所以他可以知道它是什么“级别”。 我如何在不定义类的情况下实现这种选择?
最佳答案
您有两种解决方法:
使用
List<dynamic>
而不是List<object>
.这将禁用类型检查。缺点:这将禁用类型检查。 :-)让编译器推断出列表的正确类型。为此,让您的数据层返回
DataTable
而不是DataReader
然后使用 LINQ 创建列表:var myList = (from drow in myDataTable.AsEnumerable() select new { kablanim = drow["arrK_Title"].ToString(), total = drow["arrTotal"].ToString(), ... }).ToList();
关于c# - 如何从对象列表中获取项目类型和成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697179/