동적 프로젝트 일부 속성을 제외하고 더 큰 결과

dapper linq

문제

다음과 같은 동적 Dapper 쿼리가 제공됩니다.

var results = connection.Query<dynamic>("SELECT ....");

결과에서 몇 가지 반환 된 열 / 속성을 제거하고 싶습니다. 트릭은 내가 지키고 자하는 속성의 이름을 알지 못하거나 신경 쓰지 않고이 작업을 수행하기를 원합니다. 그렇지 않으면 단순히 결과를 새로운 익명 유형으로 투영합니다.

결과를 반복하고 각 데이터를 IDictionary<string, object> 캐스팅하여 데이터를 보유하는 키 / 값 쌍을 간단하게 제거 할 수있었습니다. 불행히도, 어떤 이유로 든 기본 내부 FastExpando 개체는 Remove 메서드를 구현하지 않습니다. FastExpando의 소스 코드 는 다음과 같습니다.

bool IDictionary<string, object>.Remove(string key)
{
    throw new NotImplementedException();
}

어떻게 구현할 수 있습니까? 분명히 나는 ​​기본적으로 다음과 같이 원한다.

var filteredResults = from r in results
                      select new { // All properties except a couple of well-known ones }

수락 된 답변

FastExpandoObject 가 이러한 메소드를 구현하지 않은 이유는 없었습니다. 나는 이제 모든 missing / NotImplementedException 메소드를 채웠다. 아직 NuGet에 배포하지는 않았지만 github / google-code의 코드가 업데이트되었습니다.


인기 답변

FastExpandoObject 를 반복하고 필터링 된 ExpandoObject 반환하면 ExpandoObject 됩니까?

 var filteredResults = dynamicResult.Select<dynamic, dynamic>(x =>
                    {
                        var filteredRow = new ExpandoObject() as IDictionary<string, Object>;
                        var props = x as IDictionary<string, object>;
                        foreach (var prop in props)
                        {
                            if (!filter.Contains(prop.Key))
                                filteredRow.Add(prop);
                        }
                        return filteredRow;
                    });


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