Я обращаюсь к серверу SQL и серверу MySQL, а затем выполняю левое соединение на результирующем SQL-файле, используя результирующий MySQL-тип данных.C# left join two datatables
Тем не менее, я получаю сообщение об ошибке при попытке создать новый datatable с объединенными данными.
Эти структуры таблиц:
SqlDataTable MySqlDataTable
------------- ---------------
UserID, Field1 SiteUserID, Field2
200, 12 200, 25
И это мой фрагмент кода. Я получаю «из контекста» погрешность «mySqlDataRows» на втором в последнюю строку:
var dtResult = new DataTable();
dtResult.Columns.Add("UserID", typeof (int));
dtResult.Columns.Add("Field1", typeof (string));
dtResult.Columns.Add("Field2", typeof (int));
var result = from sqlDataRows in sqlDataTable.AsEnumerable()
join mySqlDataRows in mySqlDataTable.AsEnumerable()
on sqlDataRows.Field<string>("UserID") equals mySqlDataRows.Field<string>("SiteUserID") into lj
from r in lj.DefaultIfEmpty()
select dtResult.LoadDataRow(new object[]
{
sqlDataRows.Field<int>("UserID"),
sqlDataRows.Field<string>("Field1"),
r == null ? 0 : mySqlDataRows.Field<int>("Field2") //The name 'mySqlDataRows' does not exist in the current context
}, false);
Вы можете быть лучше делать это вручную, вместо того, чтобы пытаться быть фантазии и делать это все в одном большом заявлении LINQ. Если вы извлекаете оба набора данных в коллекции сильно типизированных объектов, затем перебираете один из них при поиске другого для соответствия и объединяете их в лучшую строго типизированную коллекцию, было бы намного яснее, что вы делаете , и, вероятно, будет работать точно так же, так как LINQ будет делать за кулисами в любом случае. –
Я пытаюсь избежать этого маршрута, потому что я хотел бы ознакомиться с LINQ и предпочесть краткость языка в этой форме. – blizz