5

Mi chiedo se esiste un modo per creare una clausola WHERE concatenata utilizzando un array di int. Ho bisogno di ottenere i risultati per l'intero array combinato. Posso fare qualcosa di simile:Clausola Where concatenata con array di stringhe

public ViewResult Results(int? programId, int? programYear, int? programTypeId, string toDate, string fromDate, int?[] programTypeIdList, int?[] programIdList) 
{ 
    surveyResponseRepository.Get().Any(x => x.ProgramId == programIdList); 
} 

risposta

4

Uso Contains:

surveyResponseRepository.Get().Any(x => programIdList.Contains(x.ProgramId)); 

Anche se questo vi dirà se alcun risultato soddisfa tali criteri.

ho il sospetto che si desidera utilizzare Where invece di Any:

surveyResponseRepository.Get().Where(x => programIdList.Contains(x.ProgramId)); 

Inoltre, perché stai usando una serie di nullable int s? Se stai cercando di rendere il parametro opzionale, lascia semplicemente una serie di regolari int s e verifica la presenza di null:

public ViewResult Results(int? programId, int? programYear, int? programTypeId, string toDate, string fromDate, int[] programTypeIdList, int[] programIdList) 
{ 
    return surveyResponseRepository.Get() 
     .Where(x => programIdList == NULL 
        || programIdList.Contains(x.ProgramId)); 

} 
1

Si può fare questo:

public ViewResult Results(int? programId, int? programYear, int? programTypeId, string toDate, string fromDate, int?[] programTypeIdList, int?[] programIdList) 
{ 
    surveyResponseRepository.Get().Where(x => programIdList.HasValue && programIdList.Value.Contains(x.ProgramId)); 
}