2010-12-19 254 views
10

我目前正在阅读EF4食谱,这本书,由Larry Tenny和Zeeshan Hirani。我在阅读这本书期间偶然看到“Composable”这个词,&对这个词的含义有一个总体的了解,但是没有确切的定义。Composable究竟意味着什么?

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

更多情况下,选中此FAQ(查找单词“可组合”页面上,只有一个),这是非常相似的书相同的上下文..

这里是一个段落,我感到困惑(从书页397):

模型定义的参数 功能不显示方向。 没有'out'参数,只暗示 'in'参数。这个 的原因是模型定义的功能是 可组合并且可以用作 LINQ查询的一部分。这可以防止他们从 返回输出参数中的值。

回答

6

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

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 Data Services,OTOH,受限得多。您可以投影,并且您可以订购,但是您无法在投影上订购。所以上面的代码将不起作用,虽然它可以调整和重新排序工作。

2

它指的是所谓的模型定义函数

本质上,您可以在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; 

有一个文章here其多解释一下。

我还没有使用它们 - 但我相信它有一些限制(例如,你不能使用表值函数,只有标量)。

HTH

相关问题