zoukankan      html  css  js  c++  java
  • Linq To DataTable

    Linq 有很多值得学习的地方,这里我们主要介绍Linq To DataTable,包括介绍DataTable类型等方面。

    Linq To DataTable

    Linq已经让我们感觉不到Query的难点, 它让我们很容易的实现高难度的Query。 或许剩下的问题, 也许是很简单的问题就是如何保存这些Query结果?

    1. var _result = DAL.Utility.SelectAll<Customer>();
    2. var _filter =
    3. from q in _result
    4. where q.CustomerID.StartsWith("B")
    5. select new
    6. {
    7. q.CustomerID,
    8. q.ContactName,
    9. q.CompanyName
    10. };

    _result 是搜索所有Customer的结果,_filter 是 _result 中 CustomerID 以“B”开始的{CustomerID , ContactName, CompanyName} 集合,但是这个匿名类型就没办法作为变量 return 给另外一个方法调用。

    可能把这个{CustomerID , ContactName, CompanyName} 集合反射到一个DataTable类型是比较符合一般数据库需求的, 或许说这也是某些旧系统轻松插上Linq翅膀的一种方案。

    下面给出Linq To DataTable的方法(某种意义上是一样的):

    1. public static System.Data.DataTable LinqToDataTable<T>(IEnumerable<T> data)
    2. {
    3. var dt = new System.Data.DataTable();
    4. var ps = typeof(T).GetProperties().ToList();
    5. ps.ForEach(p => dt.Columns.Add(p.Name, p.PropertyType));
    6. foreach (T t in data)
    7. {
    8. var dr = dt.NewRow();
    9. var vs = from p in ps select p.GetValue(t, null);
    10. var ls = vs.ToList();
    11. int i = 0;
    12. ls.ForEach(c => dr[i++] = c);
    13. dt.Rows.Add(dr);
    14. }
    15. return dt;
    16. }
    17. public static System.Data.DataTable ToDataTable<T>(IEnumerable<T> data)
    18. {
    19. var dt = new System.Data.DataTable();
    20. var ps= System.ComponentModel.TypeDescriptor.GetProperties(typeof(T));
    21. foreach (System.ComponentModel.PropertyDescriptor dp in ps )
    22. dt.Columns.Add(dp.Name, dp.PropertyType);
    23. foreach (T t in data)
    24. {
    25. var dr = dt.NewRow();
    26. foreach (System.ComponentModel.PropertyDescriptor dp in ps)
    27. dr[dp.Name] = dp.GetValue(t);
    28. dt.Rows.Add(dr);
    29. }
    30. return dt;
    31. }
  • 相关阅读:
    jsp四个域对象
    java,qq邮箱发邮件工具类(需要部分修改)
    Java使用qq邮箱发邮件实现
    JavaScript 高级
    JavaScript基础
    JQuery 高级
    JQuery 基础
    团队最后一次作业:总结
    C++多态
    结对编程
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2436462.html
Copyright © 2011-2022 走看看