首页 > 解决方案 > 如何将 LINQ IQueryable / Expression 解构为组成部分?

问题描述

我正在编写一个扩展方法,旨在帮助在 EF Core 中实际执行 LINQ 查询之前准备它。

例如:

var context = new SchoolContext();

var studentWithGrade = context.Students
                           .Where(s => s.FirstName == "Bill")
                           .Include(s => s.Grade)
                           .Prepare()
                           .FirstOrDefault();

我正在界面上构建Prepare()扩展。IQueryable<>在该方法中,我需要了解要执行的结果查询的相关信息,例如:

AFAICT,Expression在被调用IQueryable时会转换为 SQL 查询(并执行) 。FirstOrDefault()所以这种转变显然是可能的。但我想以结构化的方式检查数据,而不是检查 SQL 查询字符串。我希望我可以简单地检查可查询的 ( query.Limit < 0),但这些约束的实际存储似乎隐藏在Expression基于MethodCallExpression.cs的源代码的对象 (?) 中的反射中。

标签: c#sqlentity-frameworklinqentity-framework-core

解决方案


推荐阅读