LINQ объединяет два стола
-
03-07-2019 - |
Вопрос
У меня есть две таблицы, скажем, A и B. Cols - это GUID, someintVar, someMoreIntvar B col - GUID, someItemNO, SomeItemDesc
Теперь для одного GUID у меня будет только одна строка в таблице A. Но у меня может быть несколько строк для одного и того же GUID. Теперь я хочу запросить базу данных на основе GUID и выбрать значения в классе. Этот класс будет иметь список, который будет содержать различные строки из второй таблицы. Как я могу это сделать?
Прямо сейчас я получаю много элементов в результате, основываясь на количестве строк во второй таблице для этого GUID.
var itemColl = from p in db.A
join item in db.B on p.CardID equals item.CardID
where p.CardID == "some GUID"
select new
{
p.CardID,
p.secondCol,
p.ThirdCol,
item.ItemNo // How to add them in a collection or list.
};
Решение
Не вложенный, но как насчет переписать его немного?
var itemColl = from p in db.A
where p.CardID == "some GUID"
select new {
p.CardID,
p.secondCol,
p.ThirdCol,
Items = db.B.Where(b=>b.CardID==p.CardID)
//.Select(b=>b.ItemNo) [see comments]
}
Кроме того, вы могли бы, возможно, сгруппировать ...
Другие советы
Предположим, у вас есть отношение внешнего ключа между A и B по GUID. (А если нет, схема БД не работает и должна быть исправлена)
var itemColl = from p in db.A
where p.CardID == "some GUID"
select new
{
p.CardID,
p.secondCol,
p.ThirdCol,
Items = p.Bs
}
Предположим, что это происходит в методе NEW или LOAD вашего класса ... так я бы это сделал ...
dim myAItem AS A = (from x in db.As WHERE x.CardID == MyGUIDValue).SelectSingleOrDefault
' Assign Variables Here
Me.AValue1 = myAItem.FromDbValue1
dim itemColl = (from b in db.Bs on b == MyGUIDValue).ToList
me.ItemList = New List(of MySubClass)
For each bItem as B in itemColl
dim item as New MySubClass
'Assign Variables Here, ex: item.Value1 = bItem.MyDbValue1
me.ItemList.Add(item)
Next