Linq to sql 在LinqToSql中,对连接表中存储的父子关系建模的最佳方法是什么?
为了简化我目前的情况,让我们假设我有两个表(legacy,因此无法使用模式更好地使用Linq) 节点\u子节点类似于has\u,并且\u属于来自Rails的\u多个联接表。。。除了两个ID引用同一个表之外 理想情况下,我希望有一个节点类,它有一个属性Children,返回正确的列表? 结果应等同于Linq to sql 在LinqToSql中,对连接表中存储的父子关系建模的最佳方法是什么?,linq-to-sql,Linq To Sql,为了简化我目前的情况,让我们假设我有两个表(legacy,因此无法使用模式更好地使用Linq) 节点\u子节点类似于has\u,并且\u属于来自Rails的\u多个联接表。。。除了两个ID引用同一个表之外 理想情况下,我希望有一个节点类,它有一个属性Children,返回正确的列表? 结果应等同于 select * from node join node_children on node.key_field1 = node_children.child_key_field1 and node
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中对其建模的最佳方法是什么?这是我提出的(也适用!)
打开ORM生成的节点类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;
}
}
}
部分类节点
{
可数儿童的公共教育
{
得到
{
MyDatabaseDataContext dc=新的MyDatabaseDataContext();
从这个链接返回。ChildLinks
在dc中加入节点。新{Site=link.child_key_field1,ID=link.child_key_field2}上的节点等于新{Site=node.key_field1,ID=node.key_field2}
选择节点;
}
}
}
- ORM设计器会自动在两个表之间添加关联。我将Node类上的属性重命名为ChildLinks
- (这让我激动了好几个小时)要让LINQ联接使用复合键,您需要匹配每个零件的名称和顺序。看
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;
}
}
}