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
}
我想检查 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
}