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