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>("客商辅助核算名称")
                             };
  • 相关阅读:
    webpack-dev-server报错
    npm run dev 报错 run `npm audit fix` to fix them, or `npm audit` for details
    vscode里使用.vue代码模板的方法
    console.log()中的%d,%s等代表的输出类型
    使用Babel将单独的js文件 中的 ES6转码为ES5
    jQuery选择什么版本 1.x? 2.x? 3.x?
    在线jquery.min.js、vue.min.js引用
    WebSocket对象的“readyState”属性记录连接过程中的状态值
    vue项目中,使用vue-awesome-swiper插件实现轮播图
    vue-cli 项目里屏幕自适应
  • 原文地址:https://www.cnblogs.com/sky-gfan/p/8483396.html
Copyright © 2011-2022 走看看