CF实体框架在复合实体之间搜索

本文关键字:实体 之间 搜索 复合 框架 CF | 更新日期: 2023-09-27 18:19:41

假设我在一个实体框架中有三个模型,首先使用代码,一个是主模型,与另一个有1-n关系,与第三个有1-1关系。

例如

public class Model {
  [Key]
  public int Id {get; set;}
  public string value {get; set;}
  // 1-N relationship to modelInfo
  public virtual ICollection<ModelInfo> modelInfo {get; set;}
}
public class ModelInfo {
  [Key]
  public int Id {get; set;}
  public string value2 {get; set;}
  // 1-1 relationship between modelInfo and modelDetail
  public virtual ModelDetail {get; set;}
  [Required]
  // link back to the model
  public virtual Model model;
}
public class ModelDetail {
  [Key]
  public int Id {get; set;}
  public string modelDetail {get; set;}
  [Required]
  // 1-1 link back to the modelInfo
  public virtual ModelInfo modelInfo;
}

现在,给定该模型,假设您已经有了来自先前linq查询的模型集合。

IQueryable<Model> models;

并且您需要查找哪个模型与ModelDetail="findme"的ModelDetail关联?使用linq语法。。或者这可能吗?

类似的东西

 ModelDetail foundit = models.Where( m => m..??.. modelDetail=="findme" );

我迷失在Model和ModelInfo 之间的1-N关系中

CF实体框架在复合实体之间搜索

来自ModelDetail:

context.ModelDetails
       .Where(md => md.modelDetail == "findme")
       .Select(md => md.modelInfo.model)

或来自ModelInfo:

context.ModelInfos
       .Where(mi => mi.modelDetail.modelDetail == "findme")
       .Select(mi => mi.model);

或来自Model:

context.Models
       .Where(m => m.modelInfo
                    .Any(mi => mi.modelDetail.modelDetail == "findme"));

Model:返回ModelDetail

context.Models
       .SelectMany(m => m.modelInfo)
       .Select(mi => mi.modelDetail)
       .Where(md => md.modelDetail == "findme");