zoukankan      html  css  js  c++  java
  • linq 使用示例

    最近做项目用到linq 网上找示例东拼西凑 麻烦 刚好有段代码很多语法都用到了 就贴出来跟大家分享一下

      //这里得到将要查询的数据集 List DataTable 都行
    List<Model.ProjectSaleInfo> psiList ;
    List<Model.StoreSystem> ssList ;        
    List<Model.City> cityList ;     
    List<Model.ProjectSaleDetail> psdList;
    List<Model.KeyValueList> kvlList;
    //在进行linq查询之前 一定要先判断要查询集是否为null
                if (psiList == null || ssList == null || cityList==null||psdList==null||psdList==null||kvlList==null)
                {
                    return;
                }
                try
                {
                    //动态给linq添加where条件 由于只找到单张表动态条件的列子 所以在联合查询前先单张表过滤 先把问题解决了  以后找找看看多表的动态条件
                  psiList = (from psi in psiList select psi).AsQueryable<Model.ProjectSaleInfo>().Where(psi => psi.ProjectID == ProjectID).ToList<Model.ProjectSaleInfo>();
                
                    if (Framework.Utils.IsDateString(txtDate.Text))
                    {
                        DateTime minDate = DateTime.Parse(txtDate.Text);
                        psiList = (from psi in psiList select psi).AsQueryable<Model.ProjectSaleInfo>().Where(psi => psi.WorkDate >= minDate).ToList<Model.ProjectSaleInfo>();
                    }
                    if (Framework.Utils.IsDateString(TextBox1.Text))
                    {
                        DateTime maxDate = DateTime.Parse(TextBox1.Text);
                        psiList = (from psi in psiList select psi).AsQueryable<Model.ProjectSaleInfo>().Where(psi => psi.WorkDate <= maxDate).ToList<Model.ProjectSaleInfo>();
                    }
    
    
                    //多表左连接查询
                    var data = (from psi in psiList
                                join ss in ssList on psi.ShopID equals ss.StoreSystemID into psiss
                                from s in psiss.DefaultIfEmpty(new Model.StoreSystem { StoreSystemName = null })
                                join city in cityList on s.CityID equals city.CityID into psicity
                                from c in psicity.DefaultIfEmpty(new Model.City { CityID = null, CityName = null })
                                join psd in psdList on new { a = psi.WorkDate.HasValue ? "" : psi.WorkDate.ToString(), b = Convert.ToInt32(psi.ShopID), c = psi.ProjectID } equals new { a = psd.WorkDate.HasValue ? "" : psd.WorkDate.ToString(), b = Convert.ToInt32(psd.ShopID), c = psd.ProjectID } into psipsd
                                from p in psipsd.DefaultIfEmpty(new Model.ProjectSaleDetail { GroupBuyCount = -1, IsOutStock = -1, ProductName = null })
                                join kvl in kvlList on psi.IsDisplay equals kvl.DataKey into psikvl
                                from k in psikvl.DefaultIfEmpty(new Model.KeyValueList { DataValue = null, KeyValueDesc = null })
                                orderby psi.WorkDate
                                select new
                                {
                                    c.CityName,
                                    s.StoreSystemName,
                                    psi.WorkDate,
                                    p.GroupBuyCount,
                                    p.IsOutStock,
                                    p.ProductName,
                                    psi.IsDisplay,
                                    k.DataValue,
                                    psi.IsStack
                                });
    
                    //循环组装table
                    foreach (var d in data)
                    {
                                       }
    

     一些有关的ling数据转换的方法

    代码
    public static System.Data.DataTable LinqToDataTable<T>(IEnumerable<T> data)
    {
    var dt
    = new System.Data.DataTable();
    var ps
    = typeof(T).GetProperties().ToList();
    ps.ForEach(p
    => dt.Columns.Add(p.Name, p.PropertyType));//这里如果报“DataSet 不支 System.Nullable<>。” 的错误 就去掉p.PropertyType
    //写成 ps.ForEach(p => dt.Columns.Add(p.Name));
    foreach (T t in data)
    {
    var dr
    = dt.NewRow();
    var vs
    = from p in ps select p.GetValue(t, null);
    var ls
    = vs.ToList(); int i = 0; ls.ForEach(c => dr[i++] = c); dt.Rows.Add(dr);
    }
    return dt;
    }
  • 相关阅读:
    tar.gz文件
    Ruby Symbol
    Ruby表达式
    Linux相关命令
    Ruby file
    Tomcat优化
    修改Linux文件的所属用户和组
    Ruby String
    Ruby Range
    HTML5开源专业图像处理引擎——AlloyImage(简称AI)
  • 原文地址:https://www.cnblogs.com/mrliuc/p/1915870.html
Copyright © 2011-2022 走看看