我有三个实体
public class A
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<AB> ABs { get; set; }
}
public class AB
{
public int AId { get; set; }
public virtual A A { get; set; }
public int BId { get; set; }
public virtual B B { get; set; }
}
public class B
{
public int Id { get; set; }
public virtual ICollection<AB> ABs { get; set; }
}
我需要在Linq中编写以下SQL语句:
SELECT * FROM A, AB
WHERE
A.Name = 'name'
AND AB.BId = 1
我已经尝试过:
DbContext.Set<A>().Include(a => a.ABs.Select(ab => ab.B).Where(b => b.Id == 1)).Single(a => a.Name == "name");
DbContext.Set<A>().Include(a => a.ABs.Where(ab => ab.BId == 1)).Single(a => a.Name == "name");
DbContext.Set<A>().Include(a => a.ABs.Select(ab => ab.BId == 1).Single(a => a.Name == "name");
DbContext.Set<A>().Include(a => a.ABs.Any(ab => ab.BId == 1)).Single(a => a.Name == "name");
我总是收到同样的信息:
我想理解这个错误消息。包含路径表达式必须引用在类型上定义的导航属性。对于参考导航属性,请使用点分路径,对于集合导航属性,请使用Select运算符。
我的问题:
- "public virtual ICollection ABs" 是导航属性吗?
- 什么是点分路径?
- "参考导航属性"和"集合导航属性"之间有什么区别?
- 我应该改变什么来使我的请求工作?