C# LINQ连接返回IQueryable

C# LINQ连接返回IQueryable,c#,entity-framework,linq,C#,Entity Framework,Linq,我有三张这样的桌子 我想有一个方法,给定一个table1类型的参数和DbContext,我从表3中获得所有相关的行,通过表2 这是我的实现 public static IQueryable<table3> GetRows( EntitiesContext context, table1 row) { var table3Rows = from t2 in row.table2 join t3 in context.table3 on t2.IdTabl

我有三张这样的桌子

我想有一个方法,给定一个table1类型的参数和DbContext,我从表3中获得所有相关的行,通过表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;
}
公共静态IQueryable GetRows(
实体上下文上下文,
表1(世界其他地区)
{
var表3行=
从第2行的t2开始。表2
将t3连接到t2.IdTable3上的context.table3中等于t3.Id
选择t3;
返回表3行;
}
这种方法的问题是我无法返回table3Rows,因为它是IEnumerable而不是IQueryable

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


我需要IQueryable,因为我计划对结果执行一些其他查询。

如果您有一个已物化的
表1
对象,则无法使用导航属性。如果你有一个
IQueryable
,那么你可以使用你正在使用的一般方法,结果自然就是一个
IQueryable

由于您有一个物化的表行,因此需要查询数据库中的
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;
}
公共静态IQueryable GetRows(
实体上下文上下文,
表1(世界其他地区)
{
var表3行=
从上下文中的t2开始。表2
其中row.Table2Id==t2.Id
在t2.Table3//中的t3中,我们可以使用导航属性,因为它不在物化对象上。
选择t3;
返回表3行;
}

如果您有一个已物化的
表1
对象,则无法使用导航属性。如果你有一个
IQueryable
,那么你可以使用你正在使用的一般方法,结果自然就是一个
IQueryable

由于您有一个物化的表行,因此需要查询数据库中的
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;
}
公共静态IQueryable GetRows(
实体上下文上下文,
表1(世界其他地区)
{
var表3行=
从上下文中的t2开始。表2
其中row.Table2Id==t2.Id
在t2.Table3//中的t3中,我们可以使用导航属性,因为它不在物化对象上。
选择t3;
返回表3行;
}

检查这篇文章-检查这篇文章-这篇文章无法编译。@TamasIonut为什么不能?显然,我对OP的模式做了一些假设,可能需要根据他的具体姓名进行调整,但前提是这里的重要内容,这并没有缺陷。第一个“from”@TamasIonut后面的“on”关键字是正确的,修复了。是的,但这意味着一些更改:Table1(“行”实例)没有引用table2(表2)“Table2Id”)+第二个from仍然无法编译。这无法编译。@TamasIonut为什么不能?显然,我对OP的模式做了一些假设,可能需要根据其具体名称进行调整,但前提是这里重要的是,这没有缺陷。第一个“from”后面的“on”关键字“@tamasinout-Right,已修复。是的,但这意味着一些更改:Table1(“行”实例)没有对table2的引用(“Table2Id”)+第二个from仍然没有编译。