我有一个多对多表,它将一个对象与一个位置关联起来,例如
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))
这是非常缓慢的,似乎是一个可怕的方式来运行查询。是否有更好的方法来实现这一点,可能在一个单一的查询?
OData v4中的$crossjoin可能会解决您的问题,但目前它没有在WebApi中实现。但是OData Unbound函数可以满足你的需求,这里有一个例子:http://aspnet.codeplex.com/SourceControl/latest样品/WebApi OData/v4 ODataFunctionSample FunctionSample/
假设你的函数名是GetReferencedThings(),那么你可以通过下面的url调用它:
~/service-prefix/GetReferencedThings ()
在它的实现中,您可以利用sql脚本获取不同的东西并返回到客户端。