我有以下实体模型:员工有公司,公司有员工。
使用如下所示的包含语句时:
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,但可能有更好的解决方案?
答案 0 :(得分:0)
如果您首先创建查询 - 我总是选择保存包含(如果您正在进行复合查询/过滤,则添加它们)。
e.g。而不仅仅返回“查询”返回new QueryContext {Query = query, Includes = ...}
我希望看到一个更优雅的解决方案 - 但我认为这是你最好的选择。
否则你会看到表达树,访客和所有那些美好的东西 SQL解析也不是那么直接 - 因为查询并不总是那么简单(通常是事物的组合等)。
e.g。在查询对象中有一个“span”(如果你遍历一下),它似乎持有“包含”但它没有多大帮助。