【问题标题】:Column doesn't populate with lazy loading turned off列不填充延迟加载关闭
【发布时间】:2012-12-07 07:22:52
【问题描述】:

我有一个 linq 查询:

var query = from ct in ClaimTypes
            join c in Claims.OrderBy(x => x.ClaimValue)
                            .Include("SubClaims") on ct.ClaimTypeId equals c.ClaimTypeId into t
            select new { ct.ClaimTypeName, t };

结果是一个声明字典,键是声明类型,值是该声明类型下的声明列表。在声明中,有一列称为子声明。但是,由于服务器问题,我们关闭了延迟加载,现在 subclaims 列不会填充。在 JOIN 中使用 INCLUDE 不会填充列。任何人都可以提出任何其他解决方案吗?

【问题讨论】:

  • 你能从存储库/dbml/whatever 加入 SubClaims 吗?
  • 尝试把include放在orderby之前
  • 我尝试将包含放在 orderby 之前,结果相同。列仍然没有填充。
  • 没有连接,这个查询有效: var query = from c in Claims.Include("Subclaims").OrderBy(x => x.ClaimValue) select c;
  • 我也知道,除非您添加 ObjectQuery,否则 INCLUDE 不能与联接一起使用,但是,我不能转换“t”,它会给我一个错误

标签: c# linq entity-framework lazy-loading lazy-evaluation


【解决方案1】:

您没有在结果集中返回 t.SubClaims。包含应用于子查询,而不是最终选择。运行 SQL 探查器以确认最终选择集不包含 SubClaims 字段。

试试:

select new { ct.ClaimTypeName, t, t.SubClaims };

或者:

var query = /* you're query */;
query = query.Include(a => a.t.SubClaims);

【讨论】:

  • 这给了我这个错误:Cannot convert lambda expression to type 'string' because it is not a delegate type
  • a => a.t.SubClaims 是正确的语法,但是,在“t”之后,智能感知中没有字段作为选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
相关资源
最近更新 更多