什么是模拟LinqToSql中连接表中存储的父子关系的最佳方法?

时间:2008-12-17 07:10:45

标签: linq-to-sql

为了简化我目前的情况,我可以说我有2个表(遗产因此无法触及架构以便更好地与Linq一起使用)

node
Columns: key_field1, key_field2, [lots of other fields]

node_children
Columns: parent_key_field1, parent_key_field2, child_key_field1, child_key_field2

node_children类似于Rails中的has_and_belongs_to_many连接表...除了两个id都引用同一个表。

理想情况下,我想要一个具有Property Children的Node Class,它返回正确的List? 结果应该相当于

select * from node 
join node_children 
on node.key_field1 = node_children.child_key_field1 and node.key_field2 = node_children.child_key_field2
where node_children.parent_key_field1 = @paramX and node_children.parent_key_field2 = @paramY

在Linq to Sql中建模的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这就是我提出的(也是有效的!)
打开ORM生成的Node类MyDatabase.cs

partial class Node
{
  public IEnumerable<Node> Children
  {
    get
    {
      MyDatabaseDataContext dc = new MyDatabaseDataContext();
      return from link in this.ChildLinks
          join node in dc.Nodes on new { Site = link.child_key_field1, ID = link.child_key_field2 } equals new { Site = node.key_field1, ID = node.key_field2 }
          select node;

    }
  }
}
  • ORM设计器自动在两个表之间添加关联。我将Node类的属性重命名为ChildLinks。
  • (这让我开了几个小时)为了让LINQ联接使用复合键,你需要每个部分的 Name和Order 来匹配。请参阅How to: Join by Using Composite Keys

其中一天,我将完成LINQ入门系列文章:)