EF比较表达式<func <t,bool =“”>&gt;与T

时间:2017-12-04 15:23:25

标签: c# entity-framework

我们如何在实体框架中将Expression<Func<T, bool>>T进行比较?

例如:

Expression<Func<Book, bool>> exp = getYellowBooksExpr();
var v = context.Books.Where(exp).ToList();

上面的代码运行良好,但我们如何运行这样的查询:

var v = context.Students.Where(x => x.Book == exp).ToList();

2 个答案:

答案 0 :(得分:1)

如果不重写Where表达式,通常无法执行此操作。但您可以使用外部库(如LinqKit)为您进行重写。安装LinqKit nuget包,然后就可以了:

var v = context.Students.AsExpandable()
          .Where(x => exp.Invoke(x.Book)).ToList();

这也适用于更复杂的案例:

var v = context.Students.AsExpandable()
          .Where(x => x.Name == "something" || exp.Invoke(x.Book)).ToList();

答案 1 :(得分:1)

您可以使用以下

根据以下评论

编辑
var students = context.Students.Where(t=>context.Books                               
                     .Where(exp).Contains(t.Book));

希望这会对你有所帮助