【问题标题】:CF Entity Framework searching across compound entities跨复合实体的 CF 实体框架搜索
【发布时间】:2013-06-25 01:09:50
【问题描述】:

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

【问题讨论】:

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


    【解决方案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"));
    

    Model返回ModelDetail

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

    【讨论】:

    • 感谢您的回答。非常接近我想要做的事情。我喜欢第三种方法,来自模型(我实际上并没有直接从我的上下文中公开子模型,这可能是一个错误的决定,但它似乎是正确的,因为数据只能作为主模型的一部分存在)。该示例使用 modelinfos 查找模型,其中一个具有 modelDetail == findme。但它实际上并没有选择modelDetail。相反,它正在返回一个模型。在这一点上,我仍然遇到查找特定模型详细信息的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多