PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Source/facebook.Linq/Linq/ResultEnumerator.cs

https://bitbucket.org/assaframan/facebooklinq
C# | 100 lines | 78 code | 22 blank | 0 comment | 6 complexity | 48212bd326224c22ac04a8cc526a19b9 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. using System.Diagnostics;
  7. using System.Linq.Expressions;
  8. namespace facebook.Linq
  9. {
  10. public class FqlQueryResultEnumerable<TRowType, TResult> : IEnumerable<TResult>, IEnumerator<TResult>
  11. {
  12. public FqlQueryResultEnumerable(string responseXml, Expression<Func<TRowType, TResult>> select)
  13. {
  14. ResponseXml = responseXml;
  15. Reader = new FacebookDataReader(ResponseXml);
  16. if (select != null)
  17. Selector = select.Compile();
  18. }
  19. Func<TRowType, TResult> Selector;
  20. string ResponseXml;
  21. FacebookDataReader Reader;
  22. #region IEnumerable<T> Members
  23. public IEnumerator<TResult> GetEnumerator()
  24. {
  25. while (Reader.Read())
  26. {
  27. TRowType item = Activator.CreateInstance<TRowType>();
  28. var typeData = KnownTypeData.GetTypeData(typeof(TRowType));
  29. foreach (var p in typeData.Properties)
  30. {
  31. var realPropertyName = p.Key;
  32. var fqlFieldName = p.Value.FqlFieldName;
  33. var propInfo = p.Value.PropertyInfo;
  34. var value = Reader[fqlFieldName];
  35. if(value!=null)
  36. propInfo.SetValue(item, value, null);
  37. }
  38. if (Selector != null)
  39. yield return Selector(item);
  40. else
  41. yield return (TResult)(object)item;//TODO:
  42. }
  43. }
  44. #endregion
  45. #region IEnumerable Members
  46. IEnumerator IEnumerable.GetEnumerator()
  47. {
  48. return GetEnumerator();
  49. }
  50. #endregion
  51. #region IEnumerator<T> Members
  52. public TResult Current
  53. {
  54. get { throw new NotImplementedException(); }
  55. }
  56. #endregion
  57. #region IDisposable Members
  58. public void Dispose()
  59. {
  60. throw new NotImplementedException();
  61. }
  62. #endregion
  63. #region IEnumerator Members
  64. object IEnumerator.Current
  65. {
  66. get { throw new NotImplementedException(); }
  67. }
  68. public bool MoveNext()
  69. {
  70. throw new NotImplementedException();
  71. }
  72. public void Reset()
  73. {
  74. throw new NotImplementedException();
  75. }
  76. #endregion
  77. }
  78. }