C # LINQ слева присоединяет 2 таблицы данных

#c# #linq #join #datatable

#c# #linq #Присоединиться #datatable

Вопрос:

У меня есть 2 таблицы данных, они должны присоединиться к «Идентификатору пользователя», но это не работает. Я прочитал документы и другие решения, но они тоже не будут работать.

 var dtjoined = from DataFileInfos in FileInfo.AsEnumerable()
                       join Recips in dtMail.AsEnumerable()
                       on DataFileInfos["UserID"] equals Recips["User name"]
                       into Tb3
                       from Tb3row in Tb3.DefaultIfEmpty()
                       select Tb3;
  

Я хочу, чтобы в конце была таблица данных с левым соединением. Я не понимаю сути LINQ, даже читая документы, может кто-нибудь объяснить мне это?

И как мне получить таблицу данных? Я бы сделал что-то вроде

 foreach(var enum in dtjoined)
{
//do something to add that
myDatatable.rows.add(enum);
}
  

Редактировать:
FileInfo:

 Datatable FileInfo = new Datatable();
FileInfo.Columns.Add("Anything",typeof(anything));
...
FileInfo.Columns.Add("UserID",typeof(string));
  

dtMail:

 Datatable dtMail= new Datatable();
    dtMail.Columns.Add("Anything",typeof(anything));
    ...
    dtMail.Columns.Add("User name",typeof(string));
  

Это были мои две таблицы, и я хочу, чтобы они присоединились UserID
Итак, в конце я получил следующий результат:

 [FileInfo Column1] [FileInfo Column2] [FileInfo Column3] [FileInfo UserID] [dtMail E-Mail]
SomeValue            SomeValue             SomeValue          UserID1          SomeMail
  

Комментарии:

1. «… не работает …» — эта информация на самом деле не очень полезна. В нем не говорится, что именно не сработало, т. Е. Получали ли вы где-либо какие-либо сообщения об ошибках, пытались ли вы отладить проблему, чтобы убедиться, что она действительно выполняет задуманное.

2. Нет, я просто не могу перечислить результаты. Я хочу, чтобы в конце была таблица данных

3. вы пробовали использовать отладчик и проверять dtjoined — реализует ли он IEnumerable ?

4. Что вы имеете в виду, «просто не могу перечислить» результаты?

5. FileInfo и dtMail это список или что? попробуйте уточнить детали здесь, возможно, кто-нибудь сможет помочь вам как можно скорее.

Ответ №1:

попробуйте этот приведенный ниже код, и ниже я просто использовал некоторый класс, чтобы показать вам, как мы можем вернуть пользовательский объект с помощью LinQ.

 var dtjoined = from DataFileInfos in FileInfo.AsEnumerable()
                   join Recips in dtMail.AsEnumerable()
                   on DataFileInfos.Field<string>("UserID") equals Recips.Field<string>("User name") 
                   select new { FirstColumn= DataFileInfos.FirstColumn, ... }; // or select new { FirstColumn= DataFileInfos.FirstColumn, ... }.ToList();
  

это вернет объект, и если вам нужен список, чем выберите DataFileInfos или Recips object, или вы также можете создать другой объект, который содержит список.