LINQ包含错误

时间:2014-12-11 18:27:05

标签: c# database linq linq-to-entities

我是使用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 );

3 个答案:

答案 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(); }
    }
}

如果您使用数据优先方法,则可以使用部分类来避免重新生成代码丢失。