0

OData 構文でデータを取得しています: http://server.com/api/users ?$skip=20&$top=10

Web API コントローラーでフェッチされたすべてのエンティティにインデックスを追加しようとしています。次のエラーが発生するたびに:

1[WebPortal.Models.UserDto] Select[UserInDatabase,UserDto](System.Linq.IQueryableLINQ to Entities はメソッド 'System.Linq.IQueryable 1[DataContext.UserInDatabase], System.Linq.Expressions.Expression 1[System.Func3[DataContext.Media,System.Int32,WebPortal.Models.UserDto]])' メソッドを認識しません。このメソッドはストア式に変換できません。","ExceptionType":"System.NotSupportedException"

私が理解しているように、Entity Framework コンテキストで作業している間は Select(u, index)=> セレクターを使用できませんでした (メモリ コレクション内で正常に動作します)。残念ながら、OData + QueryableAttribute を介してコレクションを公開するために使用しています。

public class UsersController : ApiController
{
    [Queryable]
    public IQueryable<UserDto> Get()
    {
        return _repository.Users
                .Select((u, i) => new UserDto
                    {
                        Index = i,
                        Name = u.Name,
                        Age = u.Age
                    })
                .AsQueryable();
    }
}

取得プロセスを変更して OData 構文を引き続き使用し、インデックス付きのエンティティを要求側に返すことができるようにするにはどうすればよいですか?

私のエンティティ:

public class UserInDatabase
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class UserDto
{
    public int Index { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

ティア

4

1 に答える 1

1

この行を変更してみてください:

return _repository.Users

return _repository.Users.AsEnumerable()

これにより、DTO に投影する前にクエリが強制的に実行されます。

于 2013-10-28T23:31:11.550 に答える