>데이터 베이스 >MySQL 튜토리얼 >Entity Framework SQL 쿼리에서 익명 형식 결과를 검색하는 방법은 무엇입니까?

Entity Framework SQL 쿼리에서 익명 형식 결과를 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-30 19:59:09256검색

How to Retrieve Anonymous Type Results from Entity Framework SQL Queries?

Entity Framework SQL 쿼리의 익명 유형 결과

Entity Framework는 원시 SQL 쿼리 실행을 허용하지만 검색을 시도할 때 일반적인 문제가 발생합니다. 익명의 결과. 기본 SqlQuery 메소드는 특정 유형을 예상하므로 동적 또는 익명 결과와 호환되지 않습니다.

이를 극복하려면 기본 연결 객체를 사용하는 사용자 정의 접근 방식이 필요합니다. 다음 C# 코드는 솔루션을 제공합니다.

public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params)
{
    using (var cmd = db.Database.Connection.CreateCommand())
    {
        cmd.CommandText = Sql;
        if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); }

        foreach (KeyValuePair<string, object> p in Params)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.ParameterName = p.Key;
            dbParameter.Value = p.Value;
            cmd.Parameters.Add(dbParameter);
        }

        using (var dataReader = cmd.ExecuteReader())
        {
            while (dataReader.Read())
            {
                var row = new ExpandoObject() as IDictionary<string, object>;
                for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++)
                {
                    row.Add(dataReader.GetName(fieldCount), dataReader[fieldCount]);
                }
                yield return row;
            }
        }
    }
}

이 메서드는 SQL 쿼리 문자열과 매개변수 사전을 사용합니다. 기본 연결을 사용하여 명령을 생성 및 실행하고, 결과를 읽고, ExpandoObject를 열 이름과 값으로 동적으로 채웁니다.

이 메서드를 사용하려면 다음과 같이 호출하면 됩니다.

List<dynamic> results = DynamicListFromSql(myDb, "select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();

이렇게 하면 속성 이름으로 쉽게 반복하고 액세스할 수 있는 동적 익명 개체 목록이 반환됩니다.

위 내용은 Entity Framework SQL 쿼리에서 익명 형식 결과를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.