J'appelle la méthode d'extension LINQ AsQueryable d'une liste générique. Il renvoie l'exception StackOverflowException lorsque j'y accède. C'est une technique similaire utilisée dans l'application de démonstration NerdDinner asp.net mvc. Qu'est-ce que je fais mal?Pourquoi AsQueryable lance-t-il une exception 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);
}
}
Je ne vois pas le getter (Users) utilisé dans ce code, seulement la variable de classe. –
Lance-t-il lorsque AsQueryable() est appelé ou lorsque des requêtes sont effectuées sur l'objet résultant? –
J'ai modifié le code pour montrer comment il est utilisé. – user82334