我是使用asp .net和LINQ查询的新手。我写了以下查询,但收到错误。
Include path expression must refer to a navigation property defined on the type
在上面的问题中存在相同的错误,但它们并没有解释为什么会发生这种错误。我相信这是因为我在下面的第三行包含了内联的.First()方法,但我又想知道为什么会发生这种情况以及它意味着什么。谢谢你的帮助。
错误:
The Include path expression must refer to a navigation property defined on the
type. Use dotted paths for reference navigation properties and the Select
operator for collection navigation properties.
Parameter name: path
查询:
IQueryable<User> users = db.Users
.Where(u => u.Email == email)
.Include(cu => cu.CompanyUsers.First())
.Include(c => c.Companies)
.Include(p => p.ParentCompanyAccounts );
答案 0 :(得分:1)
您无法在First
来电中使用Include
。如果您要使用Include
,则需要包含相关值的所有。
答案 1 :(得分:1)
问题在于查询的第3行。当您使用Include
方法包含某些内容时,您不能只使用其中一个对象。你必须全部拿走它们。
所以你在哪里:
.Include(cu => cu.CompanyUsers.First())
应该是:
.Include(cu => cu.CompanyUsers);
为了更好地了解如何使用Include
,我建议您查看this MSDN post。
答案 2 :(得分:0)
您可以使用临时属性和持久属性。
class User
{
....
public virtual ICollection<User> CompanyUsers {get; set;} //persistent property
[NotMapped]
public User FirstCompanyUser //transient property
{
get{ return CompanyUsers.FirstOrDefault(); }
}
}
如果您使用数据优先方法,则可以使用部分类来避免重新生成代码丢失。