LINQ, объединяющий две таблицы

У меня есть две таблицы: A и B. Столбцы A - это 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.
               };

person Tanmoy    schedule 04.03.2009    source источник


Ответы (3)


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

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

person Marc Gravell    schedule 04.03.2009
comment
Спасибо, это работает. Но только одно. Он возвращает список, но не типа List‹B›. Как я могу преобразовать его? На самом деле у меня есть класс со свойством List‹B›. Мне нужно выбрать этот объект класса. - person Tanmoy; 04.03.2009
comment
Он возвращает System.Collections.Generic.List. Мне нужно, чтобы он имел List‹B› - person Tanmoy; 04.03.2009
comment
просто удалите .Select(b=›b.ItemNo) и тип будет List‹B› - person John Boker; 04.03.2009
comment
Извините, я основывался на item.ItemNo в финальном Select - просто удалите Select - person Marc Gravell; 04.03.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
               }
person James Curran    schedule 04.03.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
person Stephen Wrighton    schedule 04.03.2009