我的模型如下:
public class Analyst
{
public int AnalystId { get; set; }
public string AnalystName { get; set; }
public string CorpId { get; set; }
public string TeamLeader { get; set; }
public string TLCorpId { get; set; }
public IList<Objective> Objectives { get; set; }
public IList<ObScore> ObScores { get; set; }
}
public class Objective
{
public int ObjectiveId { get; set; }
public int AnalystId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Weight { get; set; }
public Analyst Analyst { get; set; }
}
我正在努力找到一个我可以做的具体目标:
Objective objective = db.Objectives.Find(id);
...但是,我还希望包含与目标相关联的分析师,因此我可以在已发现的Analyst对象上引用属性:
if (objective.Analyst.TLCorpId != tl)
但是当我试图添加分析师对象时,我收到一个错误:
Objective objective = db.Objectives.Include(x => x.Analyst).Find(id);
System.Linq.IQueryable<Objectives.Models.Objective>
不包含“查找”的定义,也没有“查找”的扩展方法 接受第一个类型的参数 可以找到System.Linq.IQueryable<Objectives.Models.Objective>
(您是否缺少using指令或程序集引用?)
请问有什么方法吗?
答案 0 :(得分:2)
Find
上定义的方法DbSet<T>
。方法Include
在基类DbQuery<T>
上定义。这里的问题是Include
返回基类的实例,即没有方法DbQuery<T>
的{{1}}(基于lambda的include只是用于调用相同的基于字符串的include方法的语法糖)。甚至在这里进行强制转换也无济于事,因为基类的新实例是在内部创建的:
Find
因此,使用public DbQuery<TResult> Include(string path)
{
return new DbQuery<TResult>(this._internalQuery.Include(path));
}
按ID获取实体
SingleOrDefault
注意:这里的一个区别是Objective objective = db.Objectives.Include(x => x.Analyst)
.SingleOrDefault(x => x.ObjectiveId == id);
在进行数据库查询之前首先检查实体是否已存在于上下文中。
答案 1 :(得分:1)
您可以使用
目标目标= db.Objectives.Find(id).Where(y =&gt; y.Analyst.TLCorpId!= tl).First();
别忘了检查空值