在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查询结果保存在数据表中的任何替代解决方案?
答案 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);
});