使用.contains()优化查询表达式



我有一个多对多表,它将一个对象与一个位置关联起来,例如

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脚本获取不同的东西并返回到客户端。

相关内容

  • 没有找到相关文章

最新更新