2012-03-24 3 views
0
string[] baChildrenIds = ids.Split(','); 
        List<int> intList = new List<int>(); 
        foreach (var id in baChildrenIds) 
        { 
         intList.Add(Convert.ToInt32(id)); 
        } 
        List<int> tempList = new List<int>(); 
        if (Session["SelectedList"] != null) 
        { 
         var temp = Session["SelectedList"] as List<int>; 
         tempList.AddRange(temp); 
        } 
        Session["SelectedList"] = tempList.Union(intList); 

초기 추가 두 개의 정수 값을 세션에 추가합니다. 두 번째 세션에 세 개의 정수 값을 추가합니다.목록 <int> null을 표시합니다.

내가 이와 같이 세션에 액세스 할 때 나는 allways를 얻고 있습니다.

var temp = Session["SelectedList"] as List<int>; 

신체가 나를 도와 줄 수 있습니까? 모든 세션 값을 목록으로 가져 오는 방법?

감사합니다.

답변

1

을 당신이 당신의 세션이 System.Linq.Enumerable.UnionIterator<int> 유형이 될 세션을 할당하고 세션에 액세스 할 때 일치하지 않는 List<int>에서 변환 할 때 그래서 오류를 제공합니다.

당신은 그래서 당신은 당신이 정말로 여기에 두 개의리스트를 필요로하지 않는다는 것을 나는 또한 추가해야합니다 값

if (Session["SelectedList"] != null) 

    { 

    List<int> ls = (List<int>)Session["SelectedList"];   
    var temp = ls; 

    tempList.AddRange(temp); 
    } 

Session["SelectedList"] = tempList.Union(intList).ToList(); 
+0

질문에 답할 때 텍스트 서식을 지정할 수 있습니다 (서식 지정을위한 일부 단추, 코드 용 단추가 {}, 텍스트 선택 후 {}을 클릭). –

3

List 클래스에는 Union 메서드가 없습니다. 이 메서드는 LINQ 확장에서 나오고 IEnumerable을 반환합니다. IEnumerable은 목록이 아닙니다. "as"가 아닌 cast를 사용했다면 런타임 오류가 발생했을 것입니다. 마지막 줄 끝까지 .ToList()를 붙이면됩니다.

+0

를 얻을 수 있습니다 따를 때처럼 작성해야합니다. 두 코드 절의 위치를 ​​바꾼다면 하나의 목록으로 할 수 있습니다. – Brannon

+0

하지만이 줄에 문제가 있습니다. 임시 직원 = 세션 [ "SelectedList"] 목록으로 ; – user957178

2

as 연산자는 형 변환에 실패하면 null을 반환합니다.

Session["SelectedList"]의 유형이 List<int>이 아니므로 null이 반환됩니다.

.Union을 호출하면 List<int>이 아닌 IEnumerable<int>이 반환됩니다. List<int>

2
Session["SelectedList"] = tempList.Union(intList).ToList(); 

Union 방법으로 변환 .ToList()를 호출하는 IEnumerable을 반환 목록이 아닙니다.

희망이 있습니다.

2

Union Linq 연산은 IEnumerable을 반환합니다. 세션 변수가 대신 시도 할당 할 때 :

Session["SelectedList"] = tempList.Union(intList).ToList(); 
관련 문제