我如何“走”LINQ中表之间的关系?

时间:2010-12-07 19:39:12

标签: linq linq-to-sql linqpad

假设我有三张桌子:

Office
 ID 

SalespeopleOffice 
 ID 
 OfficeID
 PersonID

People 
 ID 
 ManagerID 

在LINQ to SQL中,如何通过表之间的关系从SalespeopleOffices表开始并从该表“走”到People表或Office表?具体而言,不知道这些关系是什么;提取有关关系的数据,而不是直接与对象交互。我正在寻找一种以编程方式分析表关系的方法。我正在使用的数据库有比这更多的表,所以实际上它比这复杂得多。

我最好创建一个LinqPad脚本来执行此操作。

2 个答案:

答案 0 :(得分:5)

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

  • 值和字符串属性将是表格中的标量字段
  • EntitySet属性将代表[something] -to-many关系,
  • 其他类型将是[某事] - 一对一的关系。

如果你连接关系的两边,你可以弄清楚每种情况下[东西]是什么。这有意义吗?

修改

我只是捅了一下,而且还有更好的方法。模型信息可通过Mapping属性获得。试试这个:

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();

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

答案 1 :(得分:1)

如果您使用的是LINQ to SQL,则Salespeople Offices实例应具有人员和Office属性。

类似的东西:

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