可组合到底是什么意思?

问题描述 投票:0回答:2

我目前正在阅读 Larry Tenny 和 Zeeshan Hirani 所著的《EF4 Recipes》一书。在阅读这本书的过程中,我经常遇到“可组合”这个词,并且对该词的含义有一个大致的了解,但没有确切的定义。

我想知道确切的定义是什么,以及什么使(例如)函数“可组合”或不?

有关更多上下文,请查看此常见问题解答(在页面上查找“可组合”一词,只有一个),它与书中的相同上下文非常相似..

这是一段我对其含义感到困惑的段落(来自本书第 397 页):

模型参数定义 函数不显示方向。那里 没有“out”参数,只是隐含的 “输入”参数。这样做的原因 模型定义的函数是 可组合并且可以用作 LINQ 查询。这可以防止他们 返回输出参数中的值。

.net entity-framework
2个回答
9
投票

从这个意义上来说,可组合性意味着您可以进一步细化查询。

EF 查询非常可组合。所以你可以查询并更改它:

var q = Context.MyStuff;
q = q.Where(s => s.IsGood);
var r = from s in q select new { Id = s.Id, Description = s.Description };
r = r.OrderBy(s => s.Description);
r = r.Take(100);

所有这些工作都将在数据库服务器上完成,因为最终查询是由其各部分组成的,在上面的代码中构建。 WCF 数据服务、OTOH 的限制要大得多。你可以投影,也可以订购,但不能在投影上订购。因此,上面的代码将无法工作,尽管可以对其进行调整和重新排序以使其工作。


3
投票

本质上,您在 EDMX 中定义这些 MDF,然后您可以在 LINQ 语句中“组合”这些查询。 例如,假设您的数据库中有一个标量 UDF,它返回一个人的年龄,那么您可以将其映射到您的概念模型中并执行以下操作:

var results = from person in ctx.People where GetAge(person) > 35 // GetAge is a UDF mapped in your EDMX select person;

这里有一篇文章

对此进行了更多解释。
我没有太多使用它们 - 但我相信它有一些限制(例如你不能使用表值函数,只能使用标量)。

© www.soinside.com 2019 - 2024. All rights reserved.