zoukankan      html  css  js  c++  java
  • 抛砖引玉

    最近在一个项目中要用到WEBSERVICE传递LINQ对象列表.但直接传递IList<TEntity>是没有办法序列化这样的复杂对象的.
    [或许可以,我自已没有吃透]

    所以写了下面一段代码把IList<TEntity>转化为DataSet对象来传...(尽管对性能上有待商榷,但也不失为一个方法)
    代码如下:

    public static class MyCustomExtensions
        
    {
            
    public static DataTable ToDataTable<TEntity>(this IList<TEntity> list) where TEntity : IMyCustomObject
            
    {
                Type type 
    = typeof(TEntity);
                System.Reflection.PropertyInfo[] infos 
    = type.GetProperties();
                DataTable dt 
    = new DataTable();
                ArrayList al 
    = new ArrayList();
                
    foreach (System.Reflection.PropertyInfo info in infos)
                
    {
                    
    if (info.GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute), false).Length > 0)
                    
    {
                        dt.Columns.Add(info.Name, info.PropertyType);
                        al.Add(info.Name);
                    }

                }


                
    if (al.Count < 1)
                    
    return null;

                
    foreach (TEntity obj in list)
                
    {
                    DataRow row 
    = dt.NewRow();
                    
    foreach (string columnName in al)
                    
    {
                        row[columnName] 
    = type.GetProperty(columnName).GetValue(obj, null);
                    }

                    dt.Rows.Add(row);
                }

                
    return dt;
            }

        }
    //就只是作约束来用
    public interface ICustomObject{}
    //局部类中继承这个接口,User是Linq对象
    //如果使用dbml来生成Linq代理的朋友这样的好处是设计视图时不会被椱盖掉
    public partial class User : IGansoObject{}

    到此为止,我们的IList<User>对象就可以使用ToDataTable()这个方法了.
    如:
    MyDBContext.Instance().Users.Where(u => u.EMail.IndexOf("a")!=-1).ToList().ToDataTable();

    以上代码纯是抛砖引玉.我也期待更好的方法.请与我联系:-)

  • 相关阅读:
    第十八课 顺序存储线性表的分析
    第十七课 StaticList和DynamicList实现
    第十六课 顺序存储结构的抽象实现
    第十五课 线性表的顺序存储结构
    第十四课 线性表的本质和操作
    第十三课 类族结构的进化
    第十二课 顶层父类的创建
    第十一课 异常类构建
    HDU 5773The All-purpose Zero
    HDU 5755 Gambler Bo
  • 原文地址:https://www.cnblogs.com/apexchu/p/1222628.html
Copyright © 2011-2022 走看看