猿问

实体左连接替换 SQL

我习惯于使用 SQL 左连接来获取所有可用选项的列表并确定当前选择了哪些项目。我的表结构看起来像这样


Table MainRecord -- recordId | mainRecordInfo

Table SelectedOptions -- recordId | optionId

Table AvailableOptions -- optionId | optionValue

我的查询看起来像这样


SELECT optionValue, IIF(optionId IS NULL, 0, 1) AS selected

FROM AvailableOptions AS a

LEFT JOIN SelectedOptions AS s ON s.optionId = a.optionId AND a.recordId = 'TheCurrentRecord'

我试图用实体框架替换它,所以我需要模型和查询的帮助——它们都需要更正。


public class MainRecord

{

    public int recordId { get; set; }

    public string mainRecordInfo { get; set; }

    [ForeignKey("recordId")]

    public List<SelectedOptions> selectedOptions { get; set; }

}

public class SelectedOptions

{

    public int recordId { get; set; }

    public int optionId { get; set; }

}

public class AvailableOptions

{

    public int optionId { get; set; }

    public string optionValue { get; set; }

}

询问


IQueryable<AvailableOptions> options = from o in context.AvailableOptions select o;

我可以获得可用选项的列表,但如何获取列表并知道选择了哪些选项?


慕森卡
浏览 176回答 2
2回答

慕容708150

不是一个完整的答案,但了解您从模型中获得的导航属性确实很好。这是一个查询,很可能不是您想要的,但可以证明它from ao in _db.AvailableOptionswhere ao.recordId == "TheCurrentRecord" && ao.SelectedOptions.OptionId == 1select newMyPoxo {ao.SelectedOptions.Value ?? 0};因此,您可以浏览由 FK 指定的连接,而不仅仅是让 o 导航。在这个例子中,我假设 AvailableOptions 有一个到 SelectedOptions 的链接。
随时随地看视频慕课网APP
我要回答