【问题标题】:c# linq How can I perform this join?c# linq 如何执行此连接?
【发布时间】:2016-05-21 15:30:16
【问题描述】:

我无法加入这两个表。

我有这两张桌子

SurveySectionTable
-SurveySectionId-(pk)
-surveyId
-SurveySectionName
-comments
-score
...

SurveySectionLoalocazationTable
-SurveySectionLocalizationId-(pk)
-SurveySectionId-(fk)
-SurveySectionName
-comments
...

使用 Linq 扩展方法,我想根据 SurveySectionId 连接两个表并得到这样的结果

NewResult
-SurveySectionId
-surveyId(from SurveySectionTable)
-SurveySectionName (from SurveySectionLocalizationTable)
-comments(from SurveySectionLocalizationTable)
-score (from SurveySectionTable)
    ...

我的逻辑是这样的,有没有更好的方法?

    public async Task<SurveySectionEditViewModel> GetSurveySectionEditLocalizationVm(Guid surveySectionId, Guid localizationId)
    {   
       var defaultTable = await UOF.SurveySectionService.GetById(surveySectionId);

       var localizationTable = //get by both parameters;

       var result = new SurveySectionEditViewModel
        {
           SurveySectionId = surveySectionId,
           SurveyId = defaultTable.SurveyId,
           SurveySectionName = localizationTable.SurveySectionName,
           Comments = localizatoinTable.Comments,
           Score = defaultTable.Score
        };
        return result;
    }

【问题讨论】:

  • 你有什么尝试吗?你的实体类是什么样子的?您是否将表之间的关系建模为实体类中的导航属性?

标签: c# entity-framework linq


【解决方案1】:

使用 SQL 创建视图。然后使用 EF 查询视图。

每当您遇到 EF 时,正确的答案几乎总是“创建视图”。

【讨论】:

  • 这不是一个选项,我不允许创建它们。
  • 好吧,我可以为您提供一个完全在 EF 中完成的链接。但实际上,我强烈反对这是一种笨拙且容易出错的方法,除非您查询的是第三方供应商拥有的数据库,实际上不允许对其进行任何更改。 stackoverflow.com/questions/5010110/…
  • 谢谢。我在第一次尝试时做了完全相同的事情。作为一种扩展方法,它看起来太糟糕了,我以为我做错了。
  • 是的,这就是 EF 的缺点。你可以用它做任何事情,但大部分感觉就像一个奇怪的黑客。
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多