У меня есть три таблицы из набора данных ds.Выбор столбца левой левой колонны LINQ
var test0 = from a in ds.Tables[0].AsEnumerable()
select a["ID"].ToString();
test0 имеет следующие значения -
[0] "8"
[1] "9"
[2] "11"
[3] "2"
[4] "1"
var test1 = from a in ds.Tables[1].AsEnumerable()
select a["SubscriptionID"].ToString();
test1 имеет эти -
[0] "25"
[1] "27"
[2] "4"
[3] "26"
[4] "5"
[5] "6"
[6] "1"
[7] "24"
[8] "23"
[9] "2"
[10] "9"
var comTable1 =
from a in ds.Tables[0].AsEnumerable()
from b in ds.Tables[1].AsEnumerable()
.Where(bb => bb["SubscriptionID"].ToString() == a["ID"].ToString())
.DefaultIfEmpty()
select b;
comTable1 возвращает эти значения, которые являются правильными -
[0] null
[1] {System.Data.DataRow}
[2] null
[3] {System.Data.DataRow}
[4] {System.Data.DataRow}
Проблема для меня в том, что если я хочу выбрать конкретное поле, он выдает сообщение «Ссылка на объект, не установленная на экземпляр объекта». в comTable2 со следующими кодами -
var comTable2 =
from a in ds.Tables[0].AsEnumerable()
from b in ds.Tables[1].AsEnumerable()
.Where(bb => bb["SubscriptionID"].ToString() == a["ID"].ToString())
.DefaultIfEmpty()
select b["SubscriptionID"];
Почему левое соединение в LINQ не возвращает другие пустые значения? Есть ли способ избежать этого?
Я спрашиваю это потому, что мои коды должны продолжать левые объединяться с другими таблицами, как -
var comTable =
from a in ds.Tables[0].AsEnumerable()
from b in ds.Tables[1].AsEnumerable()
.Where(bb => bb["SubscriptionID"].ToString() == a["ID"].ToString())
.DefaultIfEmpty()
from c in ds.Tables[2].AsEnumerable()
.Where(cc => cc["ID"].ToString() == (b["GroupID"]??"null").ToString())
.DefaultIfEmpty()
select c;
Теперь я не мог получить что-нибудь от Ь и с.
Спасибо!
oh мои бедные глаза :) Пожалуйста, отформатируйте свой код, используя параметры форматирования кода (маленькая двоичная кнопка в редакторе). –
формат завершен, мой добрый поступок в течение дня. –
Ну, это было весело. Четыре человека редактируют вопрос одновременно. –