1

コードファーストを使用するエンティティ フレームワークに 3 つのモデルがあるとします。1 つはプライマリで、もう 1 つは 1 対 n の関係にあり、もう 1 つは 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 の関係に迷ってしまう

4

1 に答える 1

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");
于 2013-06-25T01:28:17.743 に答える