1

我有以下实体模型:员工有公司,公司有员工。

使用Include语句时,如下所示:

var query = context.Employees.Include(e => e.Company);
query.Dump();

从数据库中正确检索所有相关数据。(在 Company 表上使用 LEFT OUTER JOIN)

问题是当我使用 System.Linq.Dynamic 中的 GroupBy() 按 Company.Name 分组时,由于Include丢失,Employees 缺少 Company 数据。例子:

var groupByQuery = query.GroupBy("new (Company.Name as CompanyName)", "it");
groupByQuery.Dump();

有没有一种方法可以轻松地将“查询”上应用的包含检索为字符串集合,以便我可以将它们包含在动态 GroupBy 中,如下所示:

var groupByQuery2 = query.GroupBy("new (Company, Company.Name as CompanyName)", "it");
groupByQuery2.Dump();


我考虑过使用 ToString() 功能来获取 SQL 命令,如下所示:

string sql = query.ToString();

然后使用 RegEx 提取所有 LEFT OUTER JOINS,但可能有更好的解决方案?

4

1 回答 1

0

如果您首先创建查询 - 我总是选择保存包含(如果您正在进行复合查询/过滤,则添加到其中)。

例如,而不是只返回“查询”返回new QueryContext {Query = query, Includes = ...}

我希望看到一个更优雅的解决方案——但我认为这是你最好的选择。

否则,您会看到表达式树、访问者和所有这些好东西。
SQL 解析也不是那么直接——因为查询并不总是那么简单(通常是事物的组合等)。

例如,查询对象中有一个“跨度”(如果您稍微遍历一下),它似乎持有“包含”,但它没有多大帮助。

于 2013-04-01T01:45:49.313 回答