2015-11-24 41 views
0

我想檢查int[]陣列的長度。如果沒有在Where子句中使用Contains會導致錯誤:'ArrayIndex'在LINQ to Entities中不受支持

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表達式節點類型‘ArrayIndex’不是在LINQ支持,以實體

而且我懷疑這是在聲明其他導致問題,發現方法,即x => clientIds.Contains(x.CustCompID)

有沒有辦法解決這個問題?否則,我在linq中多次使用Contains。

感謝您的幫助。

+1

問題不在於'Contains'與索引屬性'clientI DS [0]'。 – juharr

+1

我想問你爲什麼用'.Find'代替更通用的'.Where'或'.Single'?爲什麼GetParentCompany不是'IQueryable '的擴展方法? –

+0

@RobertMcKee,'Find'在這種情況下不是一個linq。之前有人在存儲庫中定義了此方法。我同意你的看法,它應該有不同的說法。 – Richard77

回答

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

最有可能的是有一個簡單的方法來解決你的問題 - 只需使用一個臨時變量,因此您的代碼將如下所示:

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 
} 
相關問題