LINQ加入两个表

时间:2009-03-04 15:29:33

标签: c# linq linq-to-sql join

我有两张桌子说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 个答案:

答案 0 :(得分:5)

没有了,但重新写了一下怎么样:

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

或者,您也许可以分组......

答案 1 :(得分:0)

假设您在GUID上的A和B之间设置了外键关系。 (如果你不这样做,你的数据库模式就会被破坏,需要修复)

var itemColl = from p in db.A
               where p.CardID == "some GUID"
               select new 
               {
                   p.CardID,
                   p.secondCol,
                   p.ThirdCol,
                   Items = p.Bs
               }

答案 2 :(得分:-2)

假设这是在你班级的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