Используйте Linq для создания внутреннего объединения данных из SQL Server и Excel. - PullRequest
0 голосов
/ 30 сентября 2018

Попытка использовать Linq для создания внутреннего объединения данных из SQL Server и Excel.Я могу запросить каждый источник независимо, но получаю ошибку при соединении источников.Возвращаемая ошибка:

IQueryable, который возвращает выражение константы с собственной ссылкой, не поддерживается.

Что это значит и как я могу исправить метод?

/// <summary>
/// LINQ inner join to Excel query 
/// Sends the results of the query to a dataGridView.
/// Requires a DATAContext to talk to SQL Server.
/// Uses Linq to Excel to talk to Excel
/// </summary>
private void QueryDatabase()
{
    var excelFile = @"C:\Test\Cad_Database.xlsx";
    var excel = new ExcelQueryFactory(excelFile);

    GdaDataContext gda= new GdaDataContext();

    var query = from f in gda.DirectoryAnalysis
                join e in excel.Worksheet("Sheet1") on f.Fullname equals e["FullPath"]
                select new
                {
                    f.Fullname,
                    f.Name,
                    ExcelFullName =  e["FullPath"],
                    DrawingTitle = e["Drawing Title"],
                    DrawingNumber = e["Drawing Number"],
                    DrawingDate = e["Drawing Date"],
                    VendorName = e["Vendor Name"],
                    f.DA_Id
                };

    foreach (var item in query)
    {
        LogWriter.LogEvent($"{item.Fullname}    {item.ExcelFullName}   {item.DrawingTitle} {item.DrawingTitle}", "InnerJoinLinqToExcel");
    }
    dataGridView1.DataSource = query;
}

1 Ответ

0 голосов
/ 30 сентября 2018

Я не знаю, что такое gda.DirectoryAnalysis, но поскольку вы объединяете два разных источника данных, имеет смысл выполнить объединение в памяти (конечно, позаботьтесь о том, чтобы вы не объединяли слишком много данных в памяти).Так что, возможно, смена 4-й строки на var query = from f in gda.DirectoryAnalysis.ToList() может сработать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...