PredicateBuilder使用Contains运算符时返回错误查询

时间:2019-07-15 16:56:43

标签: c# linq linq-to-sql predicatebuilder linqkit

我正在尝试建立一个谓词。我尝试了许多方法来实现这一目标。

问题的要点是……当Entity Framework生成SQL时,它会生成WHERE子句

…WHERE SchoolId IN(@ gp1)

但是,租户中可以有多个SchoolId值。

当我尝试记录@ gp1时,我看到这样的内容 1234,67788,234556

我希望生成的内容更像这样 …在哪儿SchoolId(@ gp1,@ gp2,@ gp3,...)

这是当前代码

public class Tenant
{
    public Tenant(List<string> schoolIds)
    {
        SchoolIds = schoolIds;
    }

    public List<string> SchoolIds { get; }
}


public class AccountRepository : IAccountRepository
{
  private IEnumerable<Domain.Entities.PersonAccount> Get(Tenant tenant)
    {
        var predicate = PredicateBuilder.New<PersonAccount>(true);

        // Base query
        var accountsQuery = PersonAccounts;

        predicate = predicate.And(acct => 
        tenant.SchoolIds.Contains(acct.SchoolId));

        accountsQuery = accountsQuery.AsExpandable().Where(predicate);

        return EntityMapper.ToDomain(accountsQuery.ToLidt());
    }


 }

0 个答案:

没有答案