将存储过程LINQ结果列表转换为DataTable

时间:2017-07-20 20:18:30

标签: c# linq stored-procedures datatable

我正在修改一些工作代码,将一些代码转换为使用LINQ调用存储过程。它使C#看起来更整洁。

此当前代码调用存储过程来创建数据表,然后将其发送到openxml以创建要下载的Excel电子表格。这种方法很有效。

我想修改它以从LINQ调用SP。 我从LINQ调用存储过程来获取列表。但是,openxml需要一个DataTable。

我的代码看起来像这样:

using (TEMPDataContext dbc = new TEMPDataContext(connectionString))
{
    GetTestPlanquestionnaireResult tq  = (GetTestPlanquestionnaireResult) dbc.GetTestPlanquestionnaire(tbStartDate.Text, tbEndDate.Text);       

    DataTable tbl = tq.ConvertToDataTable();        

    MemoryStream ms = new MemoryStream();
    using (ExcelPackage pck = new ExcelPackage(ms))
    {
        ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Results");


        ws.Cells["A1"].LoadFromDataTable(tbl, true);

        ws.Cells[1, 1, 1, tbl.Columns.Count].Style.Font.Bold = true;
        ws.Cells[1, 1, 1, tbl.Columns.Count].AutoFitColumns();

        pck.Save();
    }
    byte[] buffer = ms.ToArray();

    Context.Response.ClearContent();
    Context.Response.AddHeader("content-disposition", "attachment; filename=\"downloadfilename.xlsx\"");  
    Context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Context.Response.OutputStream.Write(buffer, 0, buffer.Length);
    Context.Response.End();
}

我的问题是代码中的那一行调用了尚不存在的方法;即DataTable tbl = tq.ConvertToDataTable();

我还没有为ConvertToDataTable()编写任何代码,因为我无法想象这样做的事情并不存在。如果这是令人恼火的程度,那么我可能只是将这些内容保留原样并且不用担心转换为LINQ。有没有办法做到这一点简单易读?

1 个答案:

答案 0 :(得分:1)

如果您仍然感兴趣,这来自我的LINQPad扩展文件:

    Dim nodecount As Integer
    nodecount = 1
    tempfile = FreeFile()
    Open tempFilepath For Input As tempfile

    'Find out how many nodes there are to dimension array

    Do Until EOF(tempfile)
        Line Input #tempfile, LineFromFile
        LineItems = Split(LineFromFile, " ")
        If LineItems(0) = "RBE3" Then
            nodecount = nodecount + 1
        End If

    Loop