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がtrueの場合は、whereステートメントを追加する必要があり、falseの場合は、追加しないでください(したがって、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 に答える