2017-04-03 1 views
2

Dapper를 처음 사용합니다. 내가 무엇을 성취하려고하는지 설명하겠습니다. 나는 DB에서 열을 반환하는 간단한 쿼리를 가지고 있는데, 데이터를 채우기 위해 Entity (Property) 클래스를 만들고 싶지 않습니다. 나는 이것을 위해 Dynamic Type을 사용하고 싶다. 아래 코드는Dapper를 처리하는 방법 LINQ의 동적 인 키 값 쌍

public dynamic GetABC(int year) 
    { 

     using (var db = new MySql.Data.MySqlClient.MySqlConnection(ClsConnectionString.connectionString)) 
     { 

      string query = string.Format(@"SELECT * FROM ranking where YEAR(eventdate)='{0}') ORDER BY eventdate DESC, eventid ASC",year); 
      //return db.Query<RankingEntity>(query, commandType: System.Data.CommandType.Text).AsList(); 
      var a = (IEnumerable<dynamic>)db.Query(query, null, null, true, null, CommandType.Text).ToList(); 
      return a; 
     } 
    } 

키 값 쌍을 반환합니다. 아래처럼 : Dapper Row

그냥 "Property"= "Value"로 List를 가져 오는 일반적인 방법 하나를 작성합니다. 일반적으로 Entity Class를 사용할 때 얻습니다.

나는 그것이 가능하지만 가능하다면 우리의 어플리케이션에 구현하고 싶습니다.

필자가 원하지 않는 dapperrows를 통해 루프를 구현하여이 작업을 수행 할 수 있습니다. 왜냐하면 10000 개의 행이있을 경우 루프가 10000 번 반복하기 때문입니다.

미리 감사드립니다.

+0

DapperRow 직접'IDictionary <문자열, 개체>'로 주조 붙이 할 수있는 단정 한의 내부 클래스입니다, 키 문자열과 값 객체를 가지고 있습니다 –

+0

@MrinalKamboj, 이것을 얻으려면 위의 코드를 업데이트하십시오. –

답변

3

내가 언급 한 바와 같이 DapperRow은 Dapper의 내부 클래스이며 인터페이스를 구현하므로 IDictionary<string,object>으로 직접 유형화 할 수 있습니다. 당신이해야 할 모든 것은입니다 :

이제
var a = db.Query(query, null, null, true, null, CommandType.Text).Select(x => x as IDictionary<string,object>); 

열 이름은 키와 각각의 행 값이기 때문에, 필요한 모든 정보를 추출하는 데 사용할 수있는 유형 IEnumerable<IDictionary<string,object>>, 될 것입니다 결과는 각 요소의 값입니다 IEnumerable.

또한, 확인이도 작동 할 수 있지만 나는 확실하지 않다 :

var a = (IEnumerable<IDictionary<string,object>>)db.Query(query, null, null, true, null, CommandType.Text); 
+0

같은 DapperRow를 반환합니다. 위와 같이. –

+0

당신은 타입 캐스팅을 할 수 있습니다. DapperRow는 디버거에 대해서만 사용됩니다 –

+0

TypeCast를 내 엔터티 클래스에? –