EFExctension.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Microsoft.EntityFrameworkCore;
  2. using Microsoft.EntityFrameworkCore.Infrastructure;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Data.Common;
  7. using System.Reflection;
  8. namespace WZExport.Utilitys
  9. {
  10. public static class EntityFrameworkCoreExtensions
  11. {
  12. private static DbCommand CreateCommand(DatabaseFacade facade, string sql, out DbConnection connection, params object[] parameters)
  13. {
  14. var conn = facade.GetDbConnection();
  15. connection = conn;
  16. conn.Open();
  17. var cmd = conn.CreateCommand();
  18. cmd.CommandText = sql;
  19. cmd.Parameters.AddRange(parameters);
  20. return cmd;
  21. }
  22. public static DataTable SqlQuery(this DatabaseFacade facade, string sql, params object[] parameters)
  23. {
  24. var command = CreateCommand(facade, sql, out DbConnection conn, parameters);
  25. var reader = command.ExecuteReader();
  26. var dt = new DataTable();
  27. dt.Load(reader);
  28. reader.Close();
  29. conn.Close();
  30. return dt;
  31. }
  32. public static List<T> SqlQuery<T>(this DatabaseFacade facade, string sql, params object[] parameters) where T : class, new()
  33. {
  34. var dt = SqlQuery(facade, sql, parameters);
  35. return dt.ToList<T>();
  36. }
  37. public static List<T> ToList<T>(this DataTable dt) where T : class, new()
  38. {
  39. var propertyInfos = typeof(T).GetProperties();
  40. var list = new List<T>();
  41. foreach (DataRow row in dt.Rows)
  42. {
  43. var t = new T();
  44. foreach (PropertyInfo p in propertyInfos)
  45. {
  46. if (dt.Columns.IndexOf(p.Name) != -1 && row[p.Name] != DBNull.Value)
  47. p.SetValue(t, row[p.Name], null);
  48. }
  49. list.Add(t);
  50. }
  51. return list;
  52. }
  53. }
  54. }