CF实体框架搜索复合实体

时间:2013-06-25 01:09:51

标签: c# linq entity-framework ef-code-first

假设我在实体框架中使用代码优先的三个模型,一个是与另一个的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关系

1 个答案:

答案 0 :(得分:1)

来自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"));

ModelDetail返回Model

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