IEnumerable 캐스팅 사용자 정의 클래스 사용

c# casting dapper ienumerable

문제

최근에 dapper를 사용하여 SQL을 사용하여 항목을 쉽게 선택할 수있는 동적 방법을 만들고 싶었습니다. 이것은 내 코드입니다.

수업:

public class Method
{
    public static IEnumerable<dynamic> QueryAll(string table)
    { 
        dynamic dyn = table;
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DbCon"].ToString());
        using (con)
        {
            string sql = String.Format("SELECT * FROM {0}", table);
            IEnumerable<dynamic> ie = con.Query<dynamic>(sql, null);
            return ie;
        }

    }
}

함수 호출 :

IEnumerable<posts> = Method.QueryAll("posts");

that I cannot convert IEnumerable dynamic to IEnumerable Models.Posts 오류가 발생 that I cannot convert IEnumerable dynamic to IEnumerable Models.Posts .

어떻게 작동시킬 수 있습니까?

수락 된 답변

기술적으로 IEnumerable.Cast -method를 사용하여 메서드에서 반환 된 모든 인스턴스를 실제 인스턴스로 캐스팅 할 수 있습니다.

IEnumerable<posts> = Method.QueryAll("posts").Cast<posts>();

그러나 만약 당신이 이미 allready 쿼리에 allready 사용하지 실제 유형을 알고 계십니까? dynamic 은주의 깊게 처리해야하며, 실제로해야하는 경우에만 처리해야합니다. 여기서는 의심 스럽습니다. 예를 들어 실제 유형을 유형 매개 변수로 메소드에 추가 할 수 있습니다.

public static IEnumerable<T> QueryAll<T>(string table)
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DbCon"].ToString());
    using (con)
    {
        string sql = String.Format("SELECT * FROM {0}", table);
        IEnumerable<T> ie = con.Query<T>(sql, null);
        return ie;
    }
}

이제 다음과 같이 호출 할 수 있습니다.

var result = Method.QueryAll<posts>("posts");

옆으로 Method 으로 posts 은 정말 나쁜 클래스 이름입니다. 학생들은 수업 내용과 봉사 내용을 설명하는 학급 이름을 제공해야합니다. 또한 PascalCase 를 사용하여 클래스 Posts 만드는 클래스의 이름 지정 규칙이 있습니다. 마지막으로 posts 열거 형을 가지고있을 때 클래스 자체가 하나의 단일 게시물을 나타내지 만 실제로는 Post 라는 이름의 클래스가 필요하므로 IEnumerable<Post> 저장할 수 있다고 가정합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.