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

Try this: var query = getMySubQuery(db).Tolis() .Select( /// No ERROR!

于 2013-09-14T14:22:00.017 に答える