我有一个多对多表,它将一个对象与一个地方相关联,例如
1 1
2 1
4 3
5 9
6 2
我有许多地方的不同表,并且有几个表通过外键如地址簿条目和历史链接到它。我需要的是在MVC中向我的View发送一个集合的所有信息的集合,但前提是它是在我的多对多表中使用的地方,即在示例中放置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))
这非常慢,而且似乎是运行查询的一种可怕方式。有没有更好的方法来实现这一点,可能只有一个查询?
答案 0 :(得分:0)
OData v4中的$ crossjoin可以解决您的问题,但目前它没有在WebApi中实现。但OData Unbound Function可以满足您的要求,下面是一个示例: http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/FunctionSample/
假设你的函数名是GetReferencedThings(),那么你可以通过下面的url调用它:
〜/服务前缀/ GetReferencedThings()
在实现它时,您可以利用sql脚本获取不同的东西并返回到客户端。