1

我正在编写一个包含多个连接操作的查询。我想在一个函数中编写这个查询,以便每次我需要这个查询时都可以调用这个函数。我的功能和查询如下。由于我有几个连接操作并且我不想定义复杂的返回类型,所以我只保留返回类型IQueryable

 private IQueryable getMySubQuery(MyContext db)
 {
       var query = db.Orders
                         .Join( ... )
                         .Join( ... )
                         .Join( ... );
       return query;
 }

public IQueryable <MyType> getData()
{
     var db = ... 
     ... 
     ...
     var query = getMySubQuery(db)
                     .Select(  /// ERROR ???

    return query;
}

我收到一个错误:System.Linq.IQueryable 不包含Select.

我知道如果我将getMySubQuery()方法的返回类型定义为IQueryable <SomeType>,它将解决问题。但问题是我必须定义一个包含 50 个字段的非常复杂的类型。我不想在getMySubQuery()函数中进行投影。有什么方法可以在不创建复杂类型的情况下解决它?我想使用IQueryable而不是IEnumerable

4

2 回答 2

4

如果此示例代码真正代表您的实际代码,那么问题是您返回的是IQueryable,而不是IQueryable<T>. 您这样做的原因是因为您尝试使用匿名类型作为 的结果getMySubQuery,但不可能跨方法边界共享匿名类型。如果你真的想这样做,你需要创建一个类型来表示当前作为匿名类型返回的数据,然后确保你更改getMySubQuery为返回IQueryable<T>该类型。

于 2013-09-13T22:31:16.983 回答
-1

尝试这个: var query = getMySubQuery(db).Tolis() .Select( /// No ERROR!

于 2013-09-14T14:22:00.017 回答