我正在尝试查询DocumentDB集合,并通过一个宁静的ASP.Net Web API控制器返回结果。我有一个简单的带有名称和出生日期的Athlete类,还有一个包含以下方法的AthletesController:

  [HttpGet]
        public List<Athlete> listAthletes()
        {

            string endpoint = ConfigurationManager.AppSettings["endpoint"];
            string authkey = ConfigurationManager.AppSettings["authkey"];
            string database = ConfigurationManager.AppSettings["database"];
            string collection = "Athletes";

            DocumentClient client = new DocumentClient(new Uri(endpoint), authkey);

            List<Athlete> response = client.CreateDocumentQuery("dbs/" + database + "/colls/" + collection, "SELECT * FROM Athletes").AsEnumerable().Cast<Athlete>().ToList();

            return response;

        }


一般的想法是,我将IQueryable转换为IEnumerable,将其强制转换为Type Athlete,然后使用ToList方法使其准备好用于Web API使用。

但是,这是我在运行时遇到的错误:


  无法将类型为“ Microsoft.Azure.Documents.QueryResult”的对象转换为类型为“ TestApp.Models.Athlete”

最佳答案

您将要使用通用的CreateDocumentQuery方法而不是非通用的方法。像这样修改代码,应该会产生您想要的结果:

List<Athlete> response = client.CreateDocumentQuery<Athlete>("dbs/" + database + "/colls/" + collection, "SELECT * FROM Athletes").ToList();


另外,尽管我还没有测试过,但是您可以执行以下操作:

List<Athlete> response = client.CreateDocumentQuery("dbs/" + database + "/colls/" + collection, "SELECT * FROM Athletes").Select(doc => JsonConvert.DeserializeObject<Athlete>(doc.ToString())).ToList();


虽然在我看来这有点难看。

07-27 20:22