Używam dapper.net już teraz i jest to bardzo dobry program odwzorowujący ORM, który świetnie współpracuje z dynamicznymi typami .Net, ale zauważyłem, że gdy dapper pobiera dane z bazy danych, zwraca się, gdy typ wiersza Dappera jest są w jaki sposób mogę zwrócić go w dowolnym innym typie Like System.Dynamic.ExpandoObject?Dynamiczny typ powrotu Dappera
Odpowiedz
Obiekt DapperRow
jest przeznaczony do dzielenia wielu stanów między wierszami. Na przykład, jeśli pobierzesz 40 wierszy, nazwy kolumn itp. Są przechowywane tylko raz. Jeśli użyjemy ExpandoObject
, będzie to musiało być skonfigurowane dla każdego wiersza. W związku z tym użycie DapperRow
jako szczegółów implementacji zza kulis jest celową sprawnością.
Należy pamiętać, że obiekt zwracany z interfejsów API dynamic
może być również przesyłany jako IDictionary<string,object>
.
Byłbym jednak otwarty na wspieranie innych typów, które obsługują to użycie słownika - którego jednym z nich jest ExpandoObject
. Więc tak, to mógłby być zmieniony tak, że:
var rows = conn.Query<ExpandoObject>(...);
prace. Wymaga po prostu kodu do wsparcia, a ten kod obecnie nie istnieje. Więc "nie, ale być może w przyszłej kompilacji".
W ogóle nie trzeba używać DapperRow
... Im więcej oczekuje się scenariusza , aby użyć typowego interfejsu API do zmaterializowania własnych typów.
Oczywiście!
Zgodnie Wytworny dokumentacji użyć metody zapytań i uzyskać dymanics:
dynamic account = conn.Query<dynamic>(@"
SELECT Name, Address, Country
FROM Account
WHERE Id = @Id", new { Id = Id }).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);
Jak widać można uzyskać obiekt dynamiczny i można uzyskać dostęp do jego właściwości, o ile są one dobrze zdefiniowane w rachunku zapytania .
Jeśli anulujesz .FirstOrDefault()
, otrzymasz numer IEnumerable<dynamic>
, dzięki któremu możesz zrobić, co tylko zechcesz.
Mam ten problem i rozwiązałem go w ten sposób!
Funkcja Query()
zwraca kolekcję dynamiki, które pod spodem są w rzeczywistości typami obiektów Dapper.SqlMapper.DapperRow
. Dapper.SqlMapper.DapperRow
jest prywatny. Musiałem dynamicznie dodawać właściwości do obiektów Dapper.SqlMapper.DapperRow, ale wydaje się, że to nie działa. W rezultacie chciałem przekonwertować Dapper.SqlMapper.DapperRow
na ExpandoObject
.
udało mi się zbudować ten rodzajowy metody pomocnika jak poniżej.
public class DapperHelpers
{
public static dynamic ToExpandoObject(object value)
{
IDictionary<string, object> dapperRowProperties = value as IDictionary<string, object>;
IDictionary<string, object> expando = new ExpandoObject();
foreach (KeyValuePair<string, object> property in dapperRowProperties)
expando.Add(property.Key, property.Value);
return expando as ExpandoObject;
}
}
Następnie można użyć, że tak:
IEnumerable<ExpandoObject> result =
db.SqlConn.Query(sqlScript)
.Select(x=> (ExpandoObject)ToExpandoObject(x));
referencyjny: dapper-dot-net issues 166
- 1. Dynamiczny parametr powoduje kompilator myśleć metoda powrotu jest dynamiczny
- 2. typ wejścia - przycisk powrotu?
- 3. dynamiczny typ w MVC widoku
- 4. Wyślij SqlParameter do Dappera
- 5. Błąd grails: typ powrotu getGrailsApplication() jest niekompatybilny
- 6. Typowa metoda powrotu pustych typ wartości
- 7. Jak utworzyć typ powrotu dla metody ogólnej?
- 8. statyczny typ powrotu w interfejsach PHP 7
- 9. C# Przeciążenie typ powrotu - zalecane podejście
- 10. Typ dynamiczny dla listy <T>?
- 11. Dynamiczny typ zwracania w metodzie Java
- 12. DataContract i dynamiczny typ zwracany WCF
- 13. uzyskać typ dla obiektu ogłosił dynamiczny
- 14. Resetuj pamięć podręczną dla Dappera
- 15. Java - dziedziczone Płynna typu metoda powrotu do powrotu klasy incydent typ, a nie rodziców
- 16. Jak utworzyć własny typ dynamiczny lub obiekt dynamiczny w języku C#?
- 17. NSString stringWithFormat typ powrotu, dlaczego jest to "identyfikator"?
- 18. Czy typ powrotu Boolean jest dozwolony w C?
- 19. Jak zadeklarować funkcję, której typ powrotu został wyprowadzony?
- 20. Jak zdefiniować typ powrotu dla metody interfejsu jako innego interfejsu?
- 21. Dlaczego typ powrotu nie jest zawarty w metodzie podpisu?
- 22. Dynamiczny wybór metody opartej na parametrze wykonawczym typ
- 23. Typ dynamiczny rzutowania z id do klasy w celu c
- 24. MongoDB C# - jak zapisać dowolny dokument JSON jako typ dynamiczny?
- 25. Typ printfn w F #, static vs dynamiczny ciąg
- 26. Jak testujemy typ dynamiczny (rozmiar tekstu) w symulatorze iOS?
- 27. Jak obsługiwać typ dynamiczny w etykietach w systemie iOS 7
- 28. Funkcja typu powrotu stylu
- 29. Dynamiczny Zawiera
- 30. Jak odczytać przesunięcia czasowe z wyroczni za pomocą Dappera
dlaczego mamy do konwersji Wytworny wiersz EXPANDO obiekt wyraźnie, że jest convertable poprzez następujące podejścia prawda? var rows = conn.Query (...); –
Może w następnej wersji Dappera, która działa poprawnie, ale w wersji 1.4, której użyłem, ten skonwertowany obiekt nie ma żadnej właściwości. Znalazłem to rozwiązanie z ciekawszych problemów. – Behzad