LINQ加入返回IQueryable

时间:2016-11-18 13:46:28

标签: c# entity-framework linq

我是这样的3个表之间的关系

enter image description here

我想要一个给出类型为 table1 的参数的方法和 DbContext 我从 table3 中获取所有相关的行,通过< EM>表2

这是我的实施

public static IQueryable<table3> GetRows(
  EntitiesContext context, 
  table1 row)
{
  var table3Rows =
    from t2 in row.table2
    join t3 in context.table3 on t2.IdTable3 equals t3.Id
    select t3;

  return table3Rows;
}

这种方法的问题在于我无法返回 table3Rows ,因为它的 IEnumerable 不是 IQueryable 。< / p>

使用 join 时,是否有任何解决方法可以返回 IQueryable

我需要 IQueryable ,因为我打算对结果做一些其他查询。

1 个答案:

答案 0 :(得分:5)

如果您已经实现了Table1对象,那么您将无法使用导航属性。如果您有IQueryable<Table1>,那么您可以使用您正在使用的常规方法,结果自然会是IQueryable<Table3>

由于您有一个具体化的表格行,您需要在数据库中查询Table2项目,而不是使用导航属性。

public static IQueryable<table3> GetRows(
  EntitiesContext context, 
  table1 row)
{
  var table3Rows =
    from t2 in context.table2
    where row.Table2Id == t2.Id
    from t3 in t2.Table3 //here we can use a navigation property, since it's not on a materialized object.
    select t3;

  return table3Rows;
}