0

我的 Linq 语句出错。现在的问题是我在一个使用自定义构建的数据层的项目中,所以我不知道我是在创建错误的 Linq 语句还是数据层无法处理它。

所以这是声明:

IQueryable<Affiliate> temp;

Func<RolePersonRole, bool> func;
if (roleMustBePrimary)
{
    func  = role => role.RolePersonRoleIsPrimary.Value == true;    
}
else
{
    func = role => role.RoleId == role.RoleId;

}
temp = (from affiliate in DataFacade.Instance().Tables(SessionTicket).Affiliates()
        join role in DataFacade.Instance().Tables(SessionTicket).RolePersonRoles().Where(func) on affiliate.PersonId
            equals role.PersonId
        where role.RoleId == roleId
                && affiliate.AffiliateAssuranceLevel == assuranceLevelEnum
        select affiliate);

意思是如果 boolroleMustBePrimary为真,则应添加 where 语句,如果为假,则不应添加(因此使用role => role.RoleId == role.RoleId)。

我得到的错误是:

'System.Collections.Generic.IEnumerable`1[SkillsNG.Modules.RolePersons.Entities.RolePersonRole]' 类型的表达式不是序列

4

1 回答 1

2

正如 Wouter 所说,您不需要.Where(),您可以更清楚地表达它:

var temp = 
    from affiliate in DataFacade.Instance().Tables(SessionTicket).Affiliates()
    join role in 
        from r in DataFacade.Instance().Tables(SessionTicket).RolePersonRoles()
        where roleMustBePrimary && r.RolePersonRoleIsPrimary.Value 
              || !roleMustBePrimary
        select r
    on affiliate.PersonId equals role.PersonId
    where role.RoleId == roleId
          && affiliate.AffiliateAssuranceLevel == assuranceLevelEnum
    select affiliate;
于 2012-09-28T07:37:22.770 回答