Using Contains in a Where clause is causing error: 'ArrayIndex' is not supported in LINQ to Entities

Using Contains in a Where clause is causing error: 'ArrayIndex' is not supported in LINQ to Entities

我想检查 int[] 数组的长度。如果没有

public List<Parent_Company> GetParentCompany(params int[] clientIds)
{
  IEnumerable<Companie> ccs;
  if (clientIds.Length == 0)
     ccs = _xciRepository.GetAll<Companie>();
  else if (clientIds.Length == 1)
     ccs = _xciRepository.Find<Companie>(x => x.CustCompID == clientIds[0]);
  else
    ccs = _xciRepository.Find<Companie>(x => clientIds.Contains(x.CustCompID));

   //-- more codes here
 }

我收到以下错误:“LINQ to Entities 不支持 LINQ 表达式节点类型 'ArrayIndex'。

而且我怀疑是 else 中的语句导致了问题,即 Find 方法中的表达式,即 x => clientIds.Contains(x.CustCompID)

有办法解决吗?否则,我在 linq.

中多次使用了 Contains

感谢您的帮助。

最简单的方法是删除这两行:

else if (clientIds.Length == 1)
     ccs = _xciRepository.Find<Companie>(x => x.CustCompID == clientIds[0]);

您也可以这样做:

else if (clientIds.Length == 1)
{
     var clientId=clientIds[0];
     ccs = _xciRepository.Find<Companie>(x => x.CustCompID == clientId);
}

很可能有一种简单的方法可以解决您的问题 - 只需使用一个临时变量,因此您的代码将如下所示:

public List<Parent_Company> GetParentCompany(params int[] clientIds)
{
    IEnumerable<Companie> ccs;
    if (clientIds.Length == 0)
        ccs = _xciRepository.GetAll<Companie>();
    else if (clientIds.Length == 1)
    {
        var clientId = clientIds[0];
        ccs = _xciRepository.Find<Companie>(x => x.CustCompID == clientId]);
    }
    else
        ccs = _xciRepository.Find<Companie>(x => clientIds.Contains(x.CustCompID));

    //-- more codes here
}