【问题标题】:Where condition in Entity Framework dose not work correctly实体框架中的条件无法正常工作
【发布时间】:2018-12-10 15:21:45
【问题描述】:

我有 ArticleArticleTranslation 表。

当我使用这个查询时,它不检索数据:

model.CategoryList = await db.ArticleCategoryTranslations
            .Where(x => x.LangId == lang.Id && 
            x.ArticleCategory.IsActive.Value == true && 
            x.ArticleCategory.IsDelete.Value == false)
            .Select(x => new ddl { Id = x.RecordId.Value, Name = x.Title }).ToListAsync();

但是当我使用它时,它可以工作,告诉我第一个代码中有什么问题

model.CategoryList = await db.ArticleCategoryTranslations
            .Where(x => x.LangId == lang.Id && 
            db.ArticleCategorys.Where(u => u.Id == x.RecordId).FirstOrDefault().IsActive == true &&
            db.ArticleCategorys.Where(u => u.Id == x.RecordId).FirstOrDefault().IsDelete == false 
            )
            .Select(x => new ddl { Id = x.RecordId.Value, Name = x.Title }).ToListAsync();

【问题讨论】:

  • ArticleCategory 是否延迟加载?您是否将此导航属性标记为virtual,所以延迟加载确实有效?
  • 您是否正确设置了关系?在数据库和你的模型中?
  • 这是两个非常不同的查询。第一个似乎是查看与 ArticleCategoryTranslations 关联的 ArticleCategory 的单个实例。第二个似乎正在查看您的整个 ArticleCategorys 查找表 - 可能不是您想要的。您需要展示所涉及的模型并确保有实际匹配的数据。记录你的 SQL 可以帮助解决这个问题。
  • RecordIdArticleCategoryTranslationsArticleCategory 的 FK 吗?对于第一个查询,它通过 FK 在 ArticleCategoryTranslationsArticleCategory 之间检查 IsActiveIsDelete。对于第二个查询,它通过u => u.Id == x.RecordId 检查它们。与我们分享这两种模型的定义。

标签: entity-framework entity-framework-6 asp.net-core-mvc


【解决方案1】:

我不知道你的模型对象的属性是什么样的,但是比较两个代码 sn-ps 我在成功的一个中看到 IsActiveIsDelete 属性不调用 Value 属性,即 IsActive.ValueIsDelete.Value。 所以你的代码应该看起来像

    model.CategoryList = await db.ArticleCategoryTranslations
        .Where(x => x.LangId == lang.Id && 
        x.ArticleCategory.IsActive == true && 
        x.ArticleCategory.IsDelete == false)
        .Select(x => new ddl { Id = x.RecordId.Value, Name = x.Title }).ToListAsync();

这假设您已正确完成导航属性。

【讨论】:

  • 不,成功的工作是因为它没有查看子表 - 它正在查看整个查找表。
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多