The question is, would anyone be interested in using code that looks like this? Just like this and does what it says it will do?

Before I go any farther in extending Soapi.CS and Soapi.JS, I need to know if there is interest. Otherwise I will spend my time writing some apps.

I am actively begging for constructive or informative feedback, positive *or* negative. Please. Sometimes it feels like I am writing in the wilderness. ;-(



    // what you see is what you would get. Imagine similar in JavaScript
    // while it looks like LINQ, it is not quite. I am simply planning to 
    // use dynamic proxies (ala NHibernate) to lazy load from the API.

    ApiContext.Initialize(key);

    // initialize simply fetches all sites and prepares them with
    // the necessary data and functionality to serve as the root for
    // all queries for that site. 

    // initialization is done on a static method and happens only once
    // for each appDomain. (appdomain is a scope of execution, 
    // an application for example, NOT a web domain)
    
    ApiContext ctx = new ApiContext();
    // an ApiContext instance maintains an objectGraph cache
    // ensuring that when a new object is brought in from an http
    // query, if it is already in the graph, update it in place,
    // otherwise add it to the graph at the appropriate location
    
    User codePoet = ctx.Sites("api.stackapps.com").User(14);
    
    foreach(Question q in codePoet.Questions())
    {
      Console.WriteLine(q.Title);
      foreach(Answer a in q.Answers())
      {
        Console.WriteLine(a.Owner.DisplayName + " " + a.Owner.Reputation));
      }
    }
    
    // so you noticed the lazy loading in the  expressions above - this is where it
    // gets more interesting....

    
    IEnumerable<Question> codePoetsQuestionsOnStackOverflow 
       = codePoet.UserAssociation.Users
       .First(u=>u.Site.SiteId=="api.stackoverflow.com").Questions();

    // what you see is a navigation from my stackapps User up into
    // it's UserAssociation object (stackauth /users/{id}/associated), 
    // finds the user who's site is stackoverflow and then returns all
    //  of my stackoverflow questions. 



    // Again, there are no strings - this code will run and give you exactly 
    // what it says it will.

---

**Status**

The lazy loading proof of concept is working just as you see above and will be ready for release in a few days. 

The idea of layering a LINQ provider on top of this is on hold. See Luke's answer.

---

<strike>
And this is without LINQ. When/if I accept the task and finish implementing this, Dave and I have been talking about merging this with StackLINQ to provide the kind of client library that will let you stop worrying about how to get data and let you concentrate on doing something interesting with it.


    // real live linq

    var someInterstingQuestions = ctx.Sites("api.stackoverflow.com")
    .Users.Where(u=>u.Reputation > 20000)
    .Questions.Where(q=>(q.Title.Contains("foo") || 
    q.Title.Contains("bar")) && q.UpVotes > 10).Skip(5).Take(10);

    // the Skip is a multiple of the take, so get the 6th page of 10

    //


Can we get some pre-orders please?</strike>