我正在编写一个包含多个连接操作的查询。我想在函数中编写此查询,以便每次需要此查询时都可以调用此函数。我的功能和查询如下。由于我有几个连接操作,并且我不想定义复杂的返回类型,因此我只保留返回类型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
?
答案 0 :(得分:4)
如果此示例代码真实代表您的实际代码,则问题是您返回的是IQueryable
,而不是IQueryable<T>
。你之所以这样做是因为你试图使用匿名类型作为getMySubQuery
的结果,但是不可能跨方法边界共享匿名类型。如果您真的想要这样做,则需要创建一个表示当前作为匿名类型返回的数据的类型,然后确保将getMySubQuery
更改为返回该类型的IQueryable<T>
。< / p>
答案 1 :(得分:0)
试试这个:var query = getMySubQuery(db).Tolis()
.Select( /// No ERROR!