2012-12-23 4 views
0
Dictionary<string, DataRow> dtUsers; 
using (DataSet dsmyTable = DbConnection.db_Select_Query 
        ("use myDb select * from myTable")) 
{ 
    dtUsers= dsmyTable .Tables[0].AsEnumerable(). 
     ToDictionary(row => row.Field<string>("UserId")); 
} 

좋아 사용자 아이디는 smallint 열 입니다하지만 문자열로 캐스팅하고 싶다.수 없습니다 -. AsEnumerable()를 ToDictionary

위의 linq는 어떻게 수정해야합니까?

답변

6

당신은 문자열로 int 캐스팅 할 수는 없지만 INT의 문자열 표현을 얻을 수 있습니다 :

dtUsers= dsmyTable .Tables[0].AsEnumerable(). 
     ToDictionary(row => row.Field<short>("UserId").ToString()); 

그러나, 당신은 단지 표시 목적으로이 작업을 수행해야합니다. 일반적으로 가능한 한 int를 유지하고 싶을 것입니다. 왜냐하면 int에서 문자열을 파싱하는 대신 int를 처리하는 것이 훨씬 쉽기 때문입니다.

+0

답변 해 주셔서 감사합니다. 그래서 당신은 내가 linq 표현에서 문자열 int int 캐스팅 할 수 없다는 것을 말하는거야? – MonsterMMORPG

+0

네, 간단히 말해'short'에서'string'까지 캐스트가 없기 때문입니다. 그것은 무엇이어야 하는가? 'short'''1234'를 가지고 있다면, 결과 문자열은 무엇이되어야합니까? – Femaref

+0

나는 이미 해결책을 찾는다. 이 작업 dtUsers = dsmyTable. 테이블 [0] .AsEnumerable(). ToDictionary (row => row.Field ("UserId"). ToString()); – MonsterMMORPG

1

그냥 ToString() 메서드를 사용하십시오. 물론 이것은 smallint 열의 프리젠 테이션을위한 것입니다.

dtUsers= dsmyTable .Tables[0].AsEnumerable(). 
     ToDictionary(row => row.Field<short>("UserId").ToString()); 
+0

대답 해 주셔서 감사합니다. 그 일을했지만 작동하지 않았다 :) – MonsterMMORPG

+0

그것은 내 편집기에서 오류를주지 않는다. 오류 코드는 무엇입니까? –

+0

런타임에 오류가 발생합니다. – MonsterMMORPG