将lambda表达式与属性路径相结合

时间:2009-06-15 09:07:37

标签: c# lambda

我需要能够将2个lambda表达式组合成1:

这将使我能够创建类型安全包含(对于EF)的扩展。

现在你可以做到:

context.House
.Include(x => x.Doors.Doorknobs)

我希望能够将上述陈述分成不同的方法。

等等     IncludeDoorKnobs(query,expressionFromRoot,expressionFromCurrentToChild)

然后我想 - 将组合表达式包含在查询中 - 包括额外的子项(从当前)到该查询 - 调用其他类似的方法,包括树的另一部分。

我对Lambda的了解显然很短暂,我真的需要很快进入它们,但是现在,我不得不求助于SOF ......

1 个答案:

答案 0 :(得分:1)

使用LINQ-to-SQL这将是微不足道的;您只需使用Expression.Invoke告诉它在给定点使用现有的子表达式(带参数替换)。但是,EF没有(或者我上次检查过)没有支持这个。

不幸的是,组合两个表达式而没有的过程是......复杂的;你基本上需要完全重新构建内部树,手动替换参数之类的东西。我确实有一些代码可以做到这一点,但它远非简单(并且不是“手工”)。

但我想知道:它真的值得复杂吗?