c# - 如何从对象列表中获取项目类型和成员?

标签 c# asp.net

我有一个

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?) 

我知道编译器可以获得类型,所以他可以知道它是什么“级别”。 我如何在不定义类的情况下实现这种选择?

最佳答案

您有两种解决方法:

  1. 使用 List<dynamic>而不是 List<object> .这将禁用类型检查。缺点:这将禁用类型检查。 :-)

  2. 让编译器推断出列表的正确类型。为此,让您的数据层返回 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/

相关文章:

c# - 如何在运行时在 C# 中获取表的列名?

javascript - 在浏览器选项卡之间传递变量

c# - 是否可以在 VS 2013 中使用 HTML 设计器来构建 MVC Web 应用程序?

c# - MVC、C# 中的小数符号问题?

c# - 从 Azure 获取用户的个人资料图片

c# - 如何将 List<ExpandoObject> 中的每个对象转换为自己的类型?

asp.net - 如何将CSS应用于gridview中的按钮

c# - 如何在 .Net Spark 中的 VectorUdf 中将数组列作为参数传递?

c# - LINQ:如何返回所有父元素的所有子元素

c# - 使用更新面板从代码后面更改 CSS 类 - 不起作用