私は、LINQ拡張メソッドAsQueryableを汎用リストから呼び出しています。私はそれにアクセスするとStackOverflowException例外がスローされます。これは、NerdDinnerのasp.net mvcデモアプリケーションで使用されている同様の手法です。私は間違って何をしていますか?なぜAsQueryableはStackOverflowExceptionをスローしますか?
class FakeUserRepository : IUserRepository
{
List<User> users = new List<User>();
public FakeUserRepository() {
users.Add(new User() {
UserID = new Guid("2C3028AC-B51C-4AA6-8E19-AF962AC07EE7"),
DisplayName = "User1"
});
users.Add(new User() {
UserID = new Guid("EBA48956-2BFE-4C03-8D1B-29747FA7DB25"),
DisplayName = "User2"
});
}
public IQueryable<User> Users {
get { return users.AsQueryable(); }
}
}
public interface IUserRepository
{
IQueryable<User> Users { get; }
}
public class MyController : Controller
{
IUserRepository _userRepository;
public MyController(IUserRepository userRepository) {
_userRepository = userRepository;
}
protected override void Execute(System.Web.Routing.RequestContext requestContext) {
Guid userID = new Guid("2C3028AC-B51C-4AA6-8E19-AF962AC07EE7");
if (requestContext.HttpContext.Request.IsAuthenticated) {
var query = (from u in _userRepository.Users
where u.UserID == userID
select new {
u.DisplayName
}).FirstOrDefault();
ViewData["displayName"] = query.DisplayName;
}
base.Execute(requestContext);
}
}
getter(Users)がそのコードで使用されているとは限りません。クラス変数のみです。 –
AsQueryable()が呼び出されたとき、または結果のオブジェクトに対してクエリが実行されたときにスローされますか? –
コードを編集してその使用方法を示しました。 – user82334