IT Share you

쿼리 결과는 두 번 이상 열거 될 수 없습니다.

shareyou 2020. 11. 10. 22:34
반응형

쿼리 결과는 두 번 이상 열거 될 수 없습니다.


엔티티 프레임 워크 (ef)를 사용 중이며 다음 오류가 발생합니다.

"질의 결과는 두 번 이상 열거 될 수 없습니다."

ef 데이터 컨텍스트를 포함하는 저장소 클래스가 있습니다. 그런 다음 저장소의 인스턴스를 포함하는 컨트롤러 클래스 (MVC 컨트롤러와 혼동하지 말 것)가 있습니다. 지금까지 훌륭했습니다 ... 컨트롤러 RadComboBoxItemData에 Telerik RadComboBox 컨트롤을 채우는 데 사용되는 배열을 반환해야하는 검색 방법 이 있습니다.

public RadComboBoxItemData[] Search(int id, string searchText)
{
    var query = context.Search(id, searchText);
    List<RadComboBoxItemData> result = new List<RadComboBoxItemData>();
    foreach (var item in query)
    {
        RadComboBoxItemData itemData = new RadComboBoxItemData();
        itemData.Text = ""; // assign some text here..;
        itemData.Value = ""; /*assign some value here..*/
        result.Add(itemData);
    }

    return result.ToArray();
}

내 코드를 디버깅 할 때 foreach 루프에 들어갈 수 있지만 다음과 같은 오류가 발생합니다.

System.Data.Entity.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다.

추가 정보 : 쿼리 결과는 두 번 이상 열거 될 수 없습니다.

내 엔터티는 기존 저장된 프로 시저의 함수 가져 오기를 사용합니다.

// EF repository method calling the function imported method on the data context.
public IEnumerable<SearchItem> Search(int id, string searchText)
{
    return this.entityContext.Search(id, searchText);
}

함수 가져 오기 Search는 저장된 precedure를 호출하여 SearchItem.

foreach 루프가 ef로 인해 반복 할 수 없다는 느낌이 있습니다.


을 호출하여 결과를 명시 적으로 열거 해보십시오 ToList().

변화

foreach (var item in query)

...에

foreach (var item in query.ToList())

이것을 교체하십시오

var query = context.Search(id, searchText);

var query = context.Search(id, searchText).tolist();

모든 것이 잘 작동합니다.


이 유형의 오류가 발생하면 평소 목록으로 proc 데이터를 저장하고 다른 컨트롤을 바인딩하는 데 사용하는 것이 좋습니다.이 오류가 발생하므로 다음과 같이 해결했습니다.

repeater.DataSource = data.SPBinsReport().Tolist();
repeater.DataBind();

이렇게 해봐

참고 URL : https://stackoverflow.com/questions/5723555/the-result-of-a-query-cannot-be-enumerated-more-than-once

반응형