LINQ объединяет два стола - PullRequest
9 голосов
/ 04 марта 2009

У меня есть две таблицы, скажем, 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.
               };

Ответы [ 3 ]

5 голосов
/ 04 марта 2009

Unested, но как насчет переписать это немного:

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]
               }

В качестве альтернативы, вы могли бы, возможно, группировать ...

0 голосов
/ 04 марта 2009

Предполагается, что у вас есть отношение внешнего ключа, установленное между 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
               }
0 голосов
/ 04 марта 2009

Предположим, что это происходит в методе 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...