我们如何在实体框架中将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();
答案 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));
希望这会对你有所帮助