【问题标题】:How to get DataTable records in to list using lambda expression? [duplicate]如何使用 lambda 表达式将 DataTable 记录添加到列表中? [复制]
【发布时间】:2016-09-24 06:23:44
【问题描述】:

在给定的代码中,我编写了 lambda 表达式,但它显示了一个错误——无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型。

        EmployeeDataOperation emp = new EmployeeDataOperation(); //Class to perform CRUD operation.

        List<EmployeeProp> data = new List<EmployeeProp>();

        dt = emp.getEmployeeData();//return datatable with records.

        //I want to use lambda expression to use Datatable data as a list
        data = (from a in dt
                select new EmployeeProp { Name = a.Name, Email = a.Email }).ToList();
        //error near select

        return View(data);

【问题讨论】:

  • 这里我已经提到我要使用lamda表达式。

标签: c# asp.net-mvc model-view-controller


【解决方案1】:

您可以使用.Field linq 扩展或索引/列名(ex row["columnname"] 访问来自DataRow 的值。我建议使用Field 扩展,因为它甚至可以处理nullable 类型。

data  = dt.AsEnumerable()
  .Select(row=>  new EmployeeProp ()
   {
       Name = row.Field<string>("Name"),
       Email = row.Field<string>("Email ") 
       // Other properties....      
   })
   .ToList();

【讨论】:

    【解决方案2】:

    你也可以试试这个,创建 EmployeeProp() 对象

    data = (from a in dt
                    select new EmployeeProp() { Name = a.Name, Email = a.Email }).ToList();
    

    【讨论】:

      【解决方案3】:
       var myData = (from a in dt.AsEnumerable()
                     select new EmployeeProp { 
                         Name = a.Field<string>("Name"), 
                         Email = a.Field<string>("Email") 
                    }).ToList();
      

      【讨论】:

      • 我只是想尝试一下,否则,我正在使用实体框架,它将返回 DbSet 并轻松转换为列表。
      • 我错过了你有新的 EmployeeProp {}。所以它将是一个 List。是的,DbSet 会更简洁、更容易,不需要这种繁琐的字符串语法并在字段上提供智能感知。如果源是 MS SQL、MySQL、Sqlite 之类的......那么你也可以使用 Linq To SQL 而不是 Linq to EF。
      猜你喜欢
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      相关资源
      最近更新 更多