0

我想问是否可以通过 webget 参数选择实体数据库表?这是它的样子:

[WebGet]
    public IQueryable<TestTable> GetAllCallers(string select, string **table**)
    {

        //testCDREntities context = this.CurrentDataSource;

            var Callers = from d in this.CurrentDataSource.**table**
                          select d ;

        return Callers;



    }

当然这不起作用,但有没有办法让它起作用?我希望有人可以帮助我:)

4

1 回答 1

0

这是不可能的。你不能 serialize IQueryable<T>,因此你不能通过 WCF 发送它。

通常的方法是将您需要的属性打包到可序列化的数据传输对象中。我们正在使用Automapper将我们的域实体映射到 DTO。

如果你是铁杆,看看这个关于序列化 func的讨论。

但是,可以序列化TestTable[]. TestTable 必须是可以实例化的已知类(即不是抽象的,不是接口)。此外,数据合同中使用的所有属性都必须是可序列化的。

return Callers.ToArray();

.ToArray()执行您的查询,所以现在您发送的是实际数据,而不是抽象语法树。

- 编辑 -

抱歉,我完全错误地认为不可能通过网络发送 IQueryable。我完全错过了我们在这里谈论的 OData 服务。我一直在考虑 SOAP 服务。感谢 Rytmis 澄清了这一点。使用正确的搜索词进行谷歌搜索也引发了这个讨论:Expose IQueryable Over WCF Service

于 2016-04-06T19:10:05.083 回答