LINQ unindo duas tabelas

9

Eu tenho duas tabelas dizem A e B. Um cols são GUID, someintVar, someMoreIntvar B col são GUID, someItemNO, SomeItemDesc

Agora, para um GUID, terei apenas uma linha na Tabela A. Mas posso ter várias linhas para o mesmo GUID. Agora quero consultar o banco de dados com base no GUID e selecionar valores em uma classe. Esta classe terá uma lista que conterá linhas diferentes provenientes da segunda tabela. Como posso fazer isso?

Agora, estou obtendo muitos itens no resultado com base em quantas linhas existem na segunda tabela para esse 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.
               };
    
por Tanmoy 04.03.2009 в 16:29
fonte

3 respostas

5

Unested, mas que tal reescrever um pouco:

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

Como alternativa, talvez você possa agrupar ...

    
por Marc Gravell 04.03.2009 / 16:37
fonte
0

Supondo que você tenha um relacionamento de chave estrangeira configurado entre A e B no GUID. (E se você não fizer, seu esquema de db está quebrado e precisa ser consertado)

var itemColl = from p in db.A
               where p.CardID == "some GUID"
               select new 
               {
                   p.CardID,
                   p.secondCol,
                   p.ThirdCol,
                   Items = p.Bs
               }
    
por James Curran 04.03.2009 / 16:44
fonte
-2

Supondo que isso está acontecendo no método NEW ou LOAD da sua turma ... é assim que eu faria ...

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
    
por Stephen Wrighton 04.03.2009 / 16:38
fonte