C #에서 기본 제네릭 값 사용

ado.net c# dapper

문제

C #으로 작성된 코드가 있습니다. 재사용 할 수있는 일부 일반 코드를 작성하려고합니다. 내 실제 코드는 더 복잡합니다. 그러나 코드는 다음과 같습니다.

public async Task<T> ExecuteQueryAsync<T>(string sql)
{
  var results = default(T);
  using (var database = new SqlConnection("[ConnectionString]"))
  {
    database.Open();
    results = await database.QueryAsync<T>(sql);                        
  }
  return results;
}

프로젝트를 빌드 할 때 다음과 같은 컴파일 타임 오류가 발생합니다.

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<T>' to 'T'. An explicit conversion exists (are you missing a cast?)

왜 내가이 오류가 발생하는지 완전히 이해하지 못합니다. 나는 다음과 같은 방식으로 그것을 부를 것이다 :

Adapter adapter = new Adapter();
var results = await adapter.ExecuteQueryAsync<IEnumerable<Customer>>("SELECT * FROM Customer");

위의 경우 TIEnumerable<T> 이 아니겠습니까? 그렇다면 왜 컴파일 타임에이 형식 변환 오류가 발생하는지 이해할 수 없습니다.

고맙습니다!

수락 된 답변

이런 식으로 해보십시오.

public async Task<IEnumerable<T>> ExecuteQueryAsync<T>(string sql)
{
  IEnumerable<T> results = Enumerable.Empty<T>();
  using (var database = new SqlConnection("[ConnectionString]"))
  {
    database.Open();
    results = await database.QueryAsync<T>(sql);                        
  }
  return results;
}

인기 답변

ExecuteQueryAsync 에서는 항상 변수를 다시 작성하므로 results 변수가 필요하지 않습니다. 그래서 당신의 기능은 이렇게 될 수 있습니다.

public async Task<IEnumerable<T>> ExecuteQueryAsync<T>(string sql)
{
    using (var database = new SqlConnection("[ConnectionString]"))
    {
        database.Open();
        return await database.QueryAsync<T>(sql);                        
    }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow