将linq查询保存为数据表

时间:2012-09-12 10:35:50

标签: c# asp.net-mvc linq datatable

在c#MVC中,我需要在数据表中获得以下“结果”(var)。

var allCompanies = objentity.ExecuteFunction<SearchAvailEmployees_Result>("SearchAvailEmployees", lstParam.ToArray())
                            .ToList();

var result = from c in allCompanies select new[] { 
                            c.LastName, 
                            c.FirstName, 
                            c.Phone, 
                            c.City, 
                            c.PositionApplied, 
                            c.Status, 
                            Convert.ToString(c.CallDate.Value.ToShortDateString()), 
                            Convert.ToString(c.CellOrPager), 
                            c.Gender 
                        };

我尝试了以下代码,但它不起作用。它给出了错误

  

“无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否错过了演员?)”

IEnumerable<DataRow> query = from c in allCompanies select new[] { 
                                            c.LastName, 
                                            c.FirstName, 
                                            c.Phone, 
                                            c.City, 
                                            c.PositionApplied, 
                                            c.Status, 
                                            Convert.ToString(c.CallDate.Value.ToShortDateString()), 
                                            Convert.ToString(c.CellOrPager), 
                                            c.Gender 
                                        };

DataTable boundTable = query.CopyToDataTable<DataRow>();

将linq查询结果保存在数据表中的任何替代解决方案?

3 个答案:

答案 0 :(得分:3)

我就是这样做的:

首先,我声明一个新的DataTable并添加列,其中包含:

DataTable dt = new DataTable();
dt.Columns.Add("FirstName");
dt.Columns.Add("LastName");
DataRow row = null;

现在我执行所需的查询:

var query = from c in allCompanies select { c.LastName, c.FirstName};

现在,我只是遍历查询并填写DataTable

foreach (var rowObj in query)
{
    row = dt.NewRow();
    dt.Rows.Add(rowObj.FirstName, rowObj.LastName);
}
return dt;

仍然在我的查询中,我正在使用'join'-statements。

答案 1 :(得分:2)

首先,使用正确的架构创建DataTable

var dataTable = new DataTable();
            dataTable.Columns.Add("LastName", typeof (string));
            dataTable.Columns.Add("FirstName", typeof(string));
            // Add more columns

其次,选择值对象数组:

var result = allCompanies.Select(c => new object[] {
                    c.LastName, 
                    c.FirstName, 
                    c.Phone, 
                    c.City, 
                    c.PositionApplied, 
                    c.Status, 
                    Convert.ToString(c.CallDate.Value.ToShortDateString()), 
                    Convert.ToString(c.CellOrPager), 
                    c.Gender 
                }).ToList();

第三,循环从DataTable创建新行并将值赋给新行:

result.Foreach(array => {
     var row = dataTable.NewRow();
     row.ItemArray = array;
     dataTable.Rows.Add(row);
    });

答案 2 :(得分:1)

你应该在新的之后删除[],它就像

var result = from c in allCompanies 
             select new { c.LastName, c.FirstName, c.Phone, c.City, 
             c.PositionApplied, c.Status, 
             CallDate = Convert.ToString(c.CallDate.Value.ToShortDateString()), 
             CellOrPager = Convert.ToString(c.CellOrPager), c.Gender };

在这里创建DataTable

var dataTable = new DataTable();
dataTable.Columns.AddRange( new DataColumn[]{ 
    new DataColumn("LastName" , typeof(string)),
    new DataColumn("FirstName" , typeof(string)),
    new DataColumn("Phone" , typeof(string)),
    new DataColumn("City" , typeof(string)),
    new DataColumn("PositionApplied" , typeof(string)),
    new DataColumn("Status" , typeof(string)),
    new DataColumn("CallDate" , typeof(string)),
    new DataColumn("CellOrPager" , typeof(string)),
    new DataColumn("Gender" , typeof(string))
});

使用此结果填充DataTable

result.ToList().ForEach(x=>{
   var row = dataTable.NewRow();

   row.["LastName"] = x.LastName;
   row.["FirstName"] = x.FirstName;
   row.["Phone"] = x.Phone;
   row.["City"] = x.City;
   row.["PositionApplied"] = x.PositionApplied;
   row.["Status"] = x.Status;
   row.["CallDate"] = x.CallDate;
   row.["CellOrPager"] = x.CellOrPager;
   row.["Gender"] = x.Gender;

   dataTable.Rows.Add(row);
});
相关问题