programing

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

oldcodes 2023. 6. 18. 16:16
반응형

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

엔티티 프레임워크(ef)를 사용하고 있는데 다음 오류가 발생합니다.

"쿼리 결과를 두 번 이상 열거할 수 없습니다."

ef 데이터 컨텍스트가 포함된 리포지토리 클래스가 있습니다.그런 다음 저장소의 인스턴스를 포함하는 컨트롤러 클래스가 있습니다(MVC 컨트롤러와 혼동하지 마십시오).아직까지는...컨트롤러에 검색 방법이 있는데, 이 방법은 다음의 배열을 반환해야 합니다.RadComboBoxItemDataTelerik 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();
}

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

'System' 유형의 예외입니다.잘못된 작업시스템에서 '예외'가 발생했습니다.Data.Entity.dll이지만 사용자 코드에서 처리되지 않았습니다.

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

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

// 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의 컬렉션을 반환하기 위해 저장된 우선 순위를 호출합니다.SearchItem.

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

모든 게 잘 될 겁니다

저장 프로시저를 호출하는 데 문제가 있는 코드:

var resultSP = db.StoredProcedure(id);

if (resultSP != null)
{
    var count = resultSP.Count();
    
    var list = resultSP.Select(x=>...);
}

고정, 변수에 저장:ToList()재사용:

var resultSP = db.StoredProcedure(id);

if (resultSP != null)
{
    var resultSP_List = resultSP.ToList();
    
    var count = resultSP_List.Count();
    
    var list = resultSP_List.Select(x=>...);
}

만약 당신이 이런 종류의 오류를 얻어서 나는 당신이 보통처럼 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

반응형