#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, или вы также можете создать другой объект, который содержит список.