我怎么能';步行';LINQ中表之间的关系?

我怎么能';步行';LINQ中表之间的关系?,linq,linq-to-sql,linqpad,Linq,Linq To Sql,Linqpad,假设我有三张桌子: Office ID SalespeopleOffice ID OfficeID PersonID People ID ManagerID 在LINQ to SQL中,如何从销售人员办公室表开始,并通过表之间的关系从该表“走”到人员表或办公室表?特别是在不知道这些关系是什么的情况下;提取有关关系的数据,而不是直接与对象交互。我正在寻找一种以编程方式分析表关系的方法。我正在使用的数据库有比这多得多的表,所以实际上它比这复杂得多 理想情况下,我希望创建

假设我有三张桌子:

Office
 ID 

SalespeopleOffice 
 ID 
 OfficeID
 PersonID

People 
 ID 
 ManagerID 
在LINQ to SQL中,如何从
销售人员办公室
表开始,并通过表之间的关系从该表“走”到
人员
表或
办公室
表?特别是在不知道这些关系是什么的情况下;提取有关关系的数据,而不是直接与对象交互。我正在寻找一种以编程方式分析表关系的方法。我正在使用的数据库有比这多得多的表,所以实际上它比这复杂得多


理想情况下,我希望创建一个LinqPad脚本来实现这一点

如果您使用LINQ to SQL,您的销售人员办公室实例应该具有人员和办公室属性

比如:

var salesPO = dataContext.SalespeopleOffices.First()
var office = salesPO.Office 
var man = salesPO.People

您可以使用反射来检查上下文中每个类型的属性。(在LinqPad中,上下文是
this

  • 值和字符串属性将是表上的标量字段
  • EntitySet属性将表示[something]-to-many关系,以及
  • 其他类型将是[something]-to-one关系
如果你把关系的两个方面联系起来,你就可以找出每种情况下的[某物]是什么。这有意义吗

编辑

我只是随便看看,有更好的方法。模型信息可通过“映射”属性获得。试试这个:

var tableData = from t in this.Mapping.GetTables()
                select new 
                {
                    t.TableName,
                    Associations = 
                        from a in t.RowType.Associations
                        select new
                    {
                        a.ThisMember.Name,
                        TypeName = a.ThisMember.Type.Name
                    }
                };
tableData.Dump();

假设您已经激活了自动完成功能,那么通过探索此元数据的属性来找到您感兴趣的确切数据应该是小菜一碟。

这不是我想要的。我怎样才能找到那些提前知道他们名字的关系呢?我需要将其从对象级别抽象出来,以便能够遍历树。例如,我如何获得所有表的列表,这些表都有指向人员表的外键?是的,我认为这是正确的方向。如果我让它工作,我会发布代码。