Visual studio 2012 如何在没有实体框架的情况下使用OData

Visual studio 2012 如何在没有实体框架的情况下使用OData,visual-studio-2012,wcf-data-services,odata,Visual Studio 2012,Wcf Data Services,Odata,我对使用visual studio 2012创建OData wcf数据服务感兴趣。但是,我不想使用实体模型框架,而是使用我的无模式nosql数据集来存储和检索数据。 有没有一种方法可以让我控制odata服务,而不必进入特定的类结构,比如微软的实体框架 您可以在不使用实体框架的情况下使用Microsoft OData实现。您需要的是IQueryable的实现。以下是查询对象数组的OData服务示例: using System.Web.Http; using System.Web.Http.ODat

我对使用visual studio 2012创建OData wcf数据服务感兴趣。但是,我不想使用实体模型框架,而是使用我的无模式nosql数据集来存储和检索数据。
有没有一种方法可以让我控制odata服务,而不必进入特定的类结构,比如微软的实体框架

您可以在不使用实体框架的情况下使用Microsoft OData实现。您需要的是
IQueryable
的实现。以下是查询对象数组的OData服务示例:

using System.Web.Http;
using System.Web.Http.OData;
using System.Web.Http.OData.Builder;
using System.Web.Http.OData.Query;

// GET api/values
[ActionName("FromList")]
public IList<Poco> GetFromList(ODataQueryOptions<Poco> queryOptions)
{
    IQueryable<Poco> data = (
        new Poco[] { 
            new Poco() { id = 1, name = "one", type = "a" },
            new Poco() { id = 2, name = "two", type = "b" },
            new Poco() { id = 3, name = "three", type = "c" }
        })
        .AsQueryable();

    var t = new ODataValidationSettings() { MaxTop = 25 };
    queryOptions.Validate(t);

    var s = new ODataQuerySettings() { PageSize = 25 };
    IEnumerable<Poco> results =
        (IEnumerable<Poco>)queryOptions.ApplyTo(data, s);

    return results.ToList();
}

public class Poco
{
    public int id { get; set; }
    public string name { get; set; }
    public string type { get; set; }
}
使用System.Web.Http;
使用System.Web.Http.OData;
使用System.Web.Http.OData.Builder;
使用System.Web.Http.OData.Query;
//获取api/值
[ActionName(“FromList”)]
公共IList GetFromList(ODataQueryOptions查询选项)
{
IQueryable数据=(
新Poco[]{
new Poco(){id=1,name=“one”,type=“a”},
new Poco(){id=2,name=“two”,type=“b”},
新Poco(){id=3,name=“three”,type=“c”}
})
.AsQueryable();
var t=new-ODataValidationSettings(){MaxTop=25};
查询选项。验证(t);
var s=new-ODataQuerySettings(){PageSize=25};
数不清的结果=
(IEnumerable)queryOptions.ApplyTo(数据,s);
返回结果。ToList();
}
公共类Poco
{
公共int id{get;set;}
公共字符串名称{get;set;}
公共字符串类型{get;set;}
}

这样,您就不会失去在数据库中进行过滤的能力,而是在内存中执行过滤。无论如何,在不重新实现IQueryable接口的情况下?@gdp您在寻找类似的东西吗?我会看一看,但理想情况下,我希望解析OData查询并将其转换为某种模型,以便动态构建SQL。我正在处理的项目中的数据层没有返回IQueryable的能力,我仍然希望在db中完成分页/过滤。