zoukankan      html  css  js  c++  java
  • Linq DataTable表连接

    两个DataTable的左连接

            private List<object> GetDataByExcel(string fileName)
            {
                //把刚上传的这个excel文件中的内容查询出来
                string connStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties="Excel 12.0;HDR=YES;IMEX=1"", fileName);
                string sql = "select [主体帐簿名称],[科目名称],[客商辅助核算名称] from [Sheet1$]";
                DataTable dt = new SqlHelper().GetDataTable_ACCESS(connStr, sql);
    
                string sqlNC = @"SELECT sd1.Name AS ZhangTao,sd.Name AS KeMu,bn.NCName,bn.CustomerID FROM dbo.Biz_NCustomer AS bn
                    INNER JOIN Sys_Dict AS sd ON bn.KemuID=sd.ID INNER JOIN Sys_Dict AS sd1 ON bn.ZhangtaoID=sd1.ID";
                DataTable dtNC = new SqlHelper().GetDataTable(sqlNC);
    
                var query = from qdt in dt.AsEnumerable().Where(x => x.Field<string>("客商辅助核算名称") != string.Empty)
                            join qdtNC in dtNC.AsEnumerable()
                            on new { zt = qdt.Field<string>("主体帐簿名称"), km = qdt.Field<string>("科目名称"), nc = qdt.Field<string>("客商辅助核算名称") }
                            equals new { zt = qdtNC.Field<string>("ZhangTao"), km = qdtNC.Field<string>("KeMu"), nc = qdtNC.Field<string>("NCName") }
                            into temp
                            from tt in temp.DefaultIfEmpty()
                            select new
                            {
                                CustomerID = tt == null ? 0 : tt.Field<int>("CustomerID"),
                                ZhangTao = qdt.Field<string>("主体帐簿名称"),
                                KeMu = qdt.Field<string>("科目名称"),
                                NCName = qdt.Field<string>("客商辅助核算名称")
                            };
    
                List<object> list = new List<object>();
                foreach (var obj in query)
                {
                    list.Add(new
                    {
                        CustomerID = obj.CustomerID,
                        Zhangtao = obj.ZhangTao,
                        Kemu = obj.KeMu,
                        NCName = obj.NCName
                    });
                }
                return list;
            }

    另一种写法

                var query1 = from qdt in dt.AsEnumerable().Where(x => x.Field<string>("客商辅助核算名称") != string.Empty)
                             from qdtNC in dtNC.AsEnumerable()
                             where qdt.Field<string>("主体帐簿名称") == qdtNC.Field<string>("ZhangTao")
                              && qdt.Field<string>("科目名称") == qdtNC.Field<string>("KeMu")
                              && qdt.Field<string>("客商辅助核算名称") == qdtNC.Field<string>("NCName")
                             select new
                             {
                                 CustomerID = qdtNC.Field<int>("CustomerID"),
                                 ZhangTao = qdt.Field<string>("主体帐簿名称"),
                                 KeMu = qdt.Field<string>("科目名称"),
                                 NCName = qdt.Field<string>("客商辅助核算名称")
                             };
  • 相关阅读:
    Ceph中的容量计算与管理
    Ceph Monitor基础架构与模块详解
    Ceph:pg peering过程分析
    API调用过程
    Windows内核—保护模式
    逆向笔记——C、C++对应的汇编结构(一)
    2020年内网渗透培训:红队攻防
    2020年 初级渗透工程师【Web安全方向】
    渗透测试【网络安全】入门指南【20190607】
    渗透学习问题【一】遇到坑需要停下来补吗
  • 原文地址:https://www.cnblogs.com/sky-gfan/p/8483396.html
Copyright © 2011-2022 走看看