Linq to Entities,检查特定的外键id?

时间:2010-05-24 16:19:08

标签: c# entity-framework

我正在尝试获取外键ParentID == 0的行,这是我正在尝试但我得到NotSupportedException,因为它无法转换ArrayIndex [0]

IQueryable<ApplicationSectionNode> topLevelNodeQuery =
    from n in uacEntitiesContext.ApplicationSectionNodeSet
    where (int)n.Parent.EntityKey.EntityKeyValues[0].Value == 0
    orderby n.Sequence
    select n;

所以我需要从查询中提取ArrayIndex,以便运行时可以成功转换查询。我不知道怎么做。如何通过外键通过主键或一组对象查询特定对象?

编辑:请注意,表中实际上没有NodeId == 0的行,0是表示顶级节点的魔术值(不是我的想法)。所以我不能做n.Parent.NodeId == 0

2 个答案:

答案 0 :(得分:1)

怎么样:

IQueryable<ApplicationSectionNode> topLevelNodeQuery =
from n in uacEntitiesContext.ApplicationSectionNodeSet
where (int)n.Parent.EntityKey.EntityKeyValues.First().Value == 0
orderby n.Sequence
select n;

答案 1 :(得分:1)

您应该可以使用where n.Parent == null。可行的原因是EF在数据库中找不到ID为0的任何行,因此它将该属性设置为null(您可以以相同的方式查询它)。