获取实体框架查询中的所有包含?

时间:2013-03-31 11:17:53

标签: linq entity-framework include group-by

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

使用如下所示的包含语句时:

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

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

当我使用System.Linq.Dynamic中的GroupBy()按Company.Name分组时,问题就出现了问题,因为包含丢失了,员工缺少公司数据。 例如:

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,但可能有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

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

e.g。而不仅仅返回“查询”返回new QueryContext {Query = query, Includes = ...}

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

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

e.g。在查询对象中有一个“span”(如果你遍历一下),它似乎持有“包含”但它没有多大帮助。