【问题标题】:LINQ joining two tablesLINQ 连接两个表
【发布时间】:2009-03-04 15:29:32
【问题描述】:

我有两张桌子,分别是 A 和 B。 列是 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.
               };

【问题讨论】:

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


    【解决方案1】:

    未嵌套,但是重写一下如何:

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

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

    【讨论】:

    • 感谢它正在工作。但只有一件事。它返回一个列表,但不是 List 类型。我怎样才能转换它?实际上我有一个具有 List 属性的类。我需要选择这个类对象。
    • 它正在返回 System.Collections.Generic.List 我需要它来拥有 List
    • 只需删除 .Select(b=>b.ItemNo) ,类型将为 List
    • 对不起,我基于最终选择中的“item.ItemNo” - 只需删除选择
    【解决方案2】:

    假设您在 GUID 上的 A 和 B 之间建立了外键关系。 (如果您不这样做,您的 db 架构已损坏,需要修复)

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

    【讨论】:

      【解决方案3】:

      假设这发生在您班级的 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 2011-07-20
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多