如何使用System.Linq.Expressions.Expression来过滤基于孩子的?

Jad*_*ias 10 .net c# expression linq-to-sql

我有一个过滤器,我在许多方法中使用:

Expression<Func<Child, bool>> filter = child => child.Status == 1;
Run Code Online (Sandbox Code Playgroud)

(实际上比这更复杂)

我必须做以下事情

return db.Parents.Where(parent => parent.Status == 1 &&
                                  parent.Child.Status == 1);
Run Code Online (Sandbox Code Playgroud)

条件与上面的过滤器相同.

我想在这个方法中重用过滤器.但我不知道怎么做.我试过了

return db.Parents.Where(parent => parent.Status == 1 &&
                                  filter(parent.Child));
Run Code Online (Sandbox Code Playgroud)

但表达式不能用作方法

McX*_*McX 4

如果您想组合表达式并且仍然能够使用 linq-to-sql,您可能需要看看LinqKit。它会进入您的表达式并在 sql 转换之前用其内容替换所有函数调用。

这样就可以直接使用了

return db.Parents
       .AsExpandable()
       .Where(parent => parent.Status == 1 && filter(parent.Child));
Run Code Online (Sandbox Code Playgroud)