在Where子句中使用Contains导致错误:LINQ to Entities不支持'ArrayIndex'

时间:2015-11-24 17:57:55

标签: c# entity-framework 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'。

我怀疑这是导致问题的其他声明,查找方法中的表达,即x => clientIds.Contains(x.CustCompID)

有没有办法解决这个问题?否则,我在 linq 中多次使用包含。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

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

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);
}

答案 1 :(得分:1)

最有可能的是,有一种简单的方法可以解决您的问题 - 只需使用临时变量,因此您的代码就像:

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
}