0

例如,我有一个将对象与地点相关联的多对多表

1  1
2  1
4  3
5  9
6  2

我有很多地方的不同表,并且有几个表通过外键链接到其中,例如地址簿条目和历史记录。我需要将一个集合发送到我在 MVC 中查看一个地方的所有信息,但前提是它是我的多对多表中使用的一个地方,即示例中的地方 1、3、9 和2

所以现在我做了两个查询

var places = myodataservice.Get(new QueryBuilder<MapTable>())
                           .Select(t => t.PlaceId)
                           .Distinct();

var returnable = myodataservice.Get(
    new QueryBuilder<Places>(),
    p => p.Address,
    p => p.Address.State,
    p => p.Logo
).Where(p => places.Contains(p.Id))

这既非常慢,而且似乎是一种运行查询的糟糕方式。有没有更好的方法来实现这一点,可能是一个查询?

4

1 回答 1

0

OData v4 中的 $crossjoin 可能会解决您的问题,但目前它还没有在 WebApi 中实现。但是 OData Unbound Function 可以满足您的要求,这里有一个例子: http ://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/FunctionSample/

假设您的函数名称是 GetReferencedThings() 那么您可以通过以下网址调用它:

~/service-prefix/GetReferencedThings()

在实现它时,您可以利用 sql 脚本来获取不同的事物并返回给客户端。

于 2014-03-21T07:56:25.067 回答