将父级记录提升两级

时间:2015-09-15 09:58:50

标签: c# sql sql-server linq lambda

假设我的数据库中有这个数据结构。

Parent_table

ParentID
someOtherProp

Child_table具有1:N关系,如下所示

 ChildID
 ParentID

Child_table还有一个子表,其中1:N关系为SubChild_table

SubChildID
ChildID

现在,我有SubChildID。如何访问Parent_table someOtherProp?我试过.Include(),但我真的不确定怎么写。到目前为止,我有这样的事情:

var foo = _db.Parent_table
  .Include(c => c.Child_table
    .Select(d => d.SubChild_table
    .Where(f => f.SubChildID == subChildID)))
    .Select(r => r.someOtherProp)
    .SingleOrDefault();

我得到的错误是:

  

Include路径表达式必须引用导航属性   在类型上定义。使用虚线路径进行参考导航   属性和集合导航的Select运算符   属性。参数名称:路径

3 个答案:

答案 0 :(得分:2)

除非您想返回所包含的属性,否则您不需要.Include。在构造查询时,您可以自由地访问层次结构中所有对象的所有属性。

所以,我认为你想要的是:

var foo = (from p in _db.Parent_table
          join c in _db.Child_table on p.ParentId equals c.ParentId
          join s in _db.SubChild_table on c.ChildId equals s.ChildId
          where s.SubChildId == subChildId
          select p.someOtherProp).SingleOrDefault();

答案 1 :(得分:1)

提供外键关系集

var pathString = pathToFile.path! + "/" + fileName

答案 2 :(得分:1)

猜猜..

var foo = from pt in Parent_table
            join ct in Child_table
              on pt.ParentID equals ct.ParentID
            join sct in SubChild_table
              on ct.ChildID equals sct.ChildID
            where sct.SubChildID == "YourValue"
            select new {
                pt.SomeOtherProp
            };

或者

var foo = Parent_table
    .Join(Child_table, p => p.ParentID, c => c.ParentID, (p, c) => new { p, c })
    .Join(SubChild_table, sc => sc.c.ChildID, c => c.ChildID, (sc, c) => new { sc, c })
    .Where(sc.SubCHildID == "YourValue")
    .Select(m => new { 
        m.p.someOtherProp
    });