文档章节

Linq两表联查结果集处理

_Somuns
 _Somuns
发布于 06/26 09:33
字数 625
阅读 6
收藏 0

全局定义一个同结果集类型的变量:

var strQuery =(new int[] { 1 }).Select(x => new { DispLevel = "empty",
                    Separator ="empty",
                    GrpShortCut = "empty" ,
                    AddToolBar ="empty",
                    FuncName ="empty",
                    FuncDesc ="empty",
                    FuncTypeFlag ="empty",
                    FuncGroup ="empty",
                    AssemblyFile="empty",
                    AssemblyName="empty",
                    ShortCut="empty",
                    IconIndex=Convert.ToDecimal(0)
                }).ToList();

局部查询的结果集:

strQuery = ctx.Secgrpfuncrel.Where(t => t.Factory == sFactory && t.ProgramId == sProgramId && t.SecGrpId == sSecGrpId && t.DispLevel.CompareTo(sDispLevel) >= 0).Join(
                        ctx.Secfunction,
                        a => new { f = a.FuncName },
                        b => new { f = b.FuncName },
                        (a, b) => new
                        {
                            a.DispLevel,
                            a.Separator,
                            GrpShortCut = a.ShortCut,
                            a.AddToolBar,
                            b.FuncName,
                            b.FuncDesc,
                            b.FuncTypeFlag,
                            b.FuncGroup,
                            b.AssemblyFile,
                            b.AssemblyName,
                            b.ShortCut,
                            b.IconIndex,
                        }
                        ).OrderBy(t => t.FuncName).ToList();

注:

1、两表相同字段,其中一个取别名(GrpShortCut = a.ShortCut,别名=[字段名])

2、注意看报错信息,变量字段类型不同会导致类型转换失败。

==============

两表联查结果集为a.*时(两种处理方法):

SQL:

strQuery = "SELECT A.*"
                                 + " FROM SPCEDCDATA A, SPCCALDATA B"
                                 + " WHERE A.FACTORY=?"
                                 + " AND A.FACTORY = B.FACTORY"
                                 + " AND A.CHART_ID = B.CHART_ID"
                                 + " AND A.HIST_SEQ = B.HIST_SEQ"
                                 + " AND A.UNIT_SEQ = B.UNIT_SEQ"
                                 + " AND B.EXCLUDE_FLAG<>'Y'"
                                 + " AND A.CHART_ID=?"
                                 + " AND (A.HIST_SEQ > ? OR (A.HIST_SEQ = ?	AND A.UNIT_SEQ > ?)" + " OR (A.HIST_SEQ = ? AND A.UNIT_SEQ = ? AND A.VALUE_SEQ >= ?))"
                                 + " AND A.TRAN_TIME<=?"
                                 + " AND A.TRAN_TIME>=?"
                                 + " ORDER BY A.HIST_SEQ ASC, A.UNIT_SEQ ASC, A.VALUE_SEQ ASC";

 to Linq:

var listSpcedcdata = (new int[] { 1 }).Select(x=>new {
                Factory   ="empty",
                ChartId   = "empty",
                HistSeq   = Convert.ToDecimal(0),
                TranTime  = "empty",
                LotResFlag = "empty",
                LotId     = "empty",
                MatId     = "empty",
                MatVer    = Convert.ToDecimal(0),
                Flow      = "empty",
                Oper      = "empty",
                ProcOper  = "empty",
                ResId     = "empty",
                ProcResId = "empty",
                EventId   = "empty",
                CharId    = "empty",
                UnitId    = "empty",
                UnitSeq   = Convert.ToDecimal(0),
                ValueType = "empty",
                ValueSeq  = Convert.ToDecimal(0),
                ValueCount = Convert.ToDecimal(0),
                Value1     = "empty",
                Value2     ="empty",
                Value3     ="empty",
                Value4     ="empty",
                Value5     ="empty",
                Value6     ="empty",
                Value7     ="empty",
                Value8     ="empty",
                Value9     = "empty",
                Value10     ="empty",
                Value11     ="empty",
                Value12     ="empty",
                Value13     ="empty",
                Value14     ="empty",
                Value15     ="empty",
                Value16     ="empty",
                Value17     ="empty",
                Value18     ="empty",
                Value19     ="empty",
                Value20     ="empty",
                Value21     ="empty",
                Value22     ="empty",
                Value23     ="empty",
                Value24     ="empty",
                Value25     ="empty",
                Nominal     = "empty",
                ProcessSigma = "empty",
                EdcComment   ="empty",
                EdcHistSeq   = Convert.ToDecimal(0),
                EdcCharSeq   = Convert.ToDecimal(0),
                EdcUnitSeq   =Convert.ToDecimal(0),
                CreateUserId = "empty",
                CreateTime   = "empty",
                UpdateUserId = "empty",
                UpdateTime   ="empty",
                ResvField1   ="empty",
                ResvField2   ="empty",
                ResvField3   ="empty",
                ResvField4   ="empty",
                ResvField5   = "empty",
            }).ToList();

 

listSpcedcdata = ctx.Spcedcdata.Where(t =>t.Factory==sFactory&& t.ChartId == sChartId && (t.HistSeq > iHistSeq || (t.HistSeq == iHistSeq && t.UnitSeq > iUnitSeq) || (t.HistSeq == iHistSeq && t.UnitSeq == iUnitSeq
                && t.ValueSeq >= iValueSeq)) && t.TranTime.CompareTo(sToTime) <= 0 && t.TranTime.CompareTo(sFromTime) >= 0)
                    .Join(
                    ctx.Spccaldata.Where(t=>t.ExcludeFlag!="Y"),
                    a => new { f=a.Factory,id=a.ChartId,hs=a.HistSeq,us=a.UnitSeq},
                    b => new { f = b.Factory, id = b.ChartId, hs = b.HistSeq, us = b.UnitSeq },
                    (a, b) => new 
                    {
                        a.Factory , 
                        a.ChartId ,
                        a.HistSeq ,
                        a.TranTime ,
                        a.LotResFlag ,
                        a.LotId ,
                        a.MatId ,
                        a.MatVer ,
                        a.Flow ,
                        a.Oper ,
                        a.ProcOper ,
                        a.ResId ,
                        a.ProcResId ,
                        a.EventId ,
                        a.CharId ,
                        a.UnitId ,
                        a.UnitSeq ,
                        a.ValueType ,
                        a.ValueSeq ,
                        a.ValueCount ,
                        a.Value1 ,
                        a.Value2 ,
                        a.Value3 ,
                        a.Value4 ,
                        a.Value5 ,
                        a.Value6 ,
                        a.Value7 ,
                        a.Value8 ,
                        a.Value9 ,
                        a.Value10,
                        a.Value11,
                        a.Value12,
                        a.Value13,
                        a.Value14,
                        a.Value15,
                        a.Value16,
                        a.Value17,
                        a.Value18,
                        a.Value19,
                        a.Value20,
                        a.Value21,
                        a.Value22,
                        a.Value23,
                        a.Value24,
                        a.Value25,
                        a.Nominal,
                        a.ProcessSigma,
                        a.EdcComment  ,
                        a.EdcHistSeq  ,
                        a.EdcCharSeq  ,
                        a.EdcUnitSeq  ,
                        a.CreateUserId,
                        a.CreateTime  ,
                        a.UpdateUserId,
                        a.UpdateTime  ,
                        a.ResvField1  ,
                        a.ResvField2  ,
                        a.ResvField3  ,
                        a.ResvField4  ,
                        a.ResvField5  ,

                    } ).OrderBy(t=>t.HistSeq).ThenBy(t=>t.UnitSeq).ThenBy(t=>t.ValueSeq).ToList();

(2)

Spcedcdata c = new Spcedcdata();
var listSpcedcdata = (new int[] { 1 }).Select(x=>new {
                a=c
            }).ToList();

注意变量名不要是a,b      避免跟Linq查询中的a,b冲突。

listSpcedcdata = ctx.Spcedcdata.Where(t =>t.Factory==sFactory&& t.ChartId == sChartId && (t.HistSeq > iHistSeq || (t.HistSeq == iHistSeq && t.UnitSeq > iUnitSeq) || (t.HistSeq == iHistSeq && t.UnitSeq == iUnitSeq
                && t.ValueSeq >= iValueSeq)) && t.TranTime.CompareTo(sToTime) <= 0 && t.TranTime.CompareTo(sFromTime) >= 0)
                    .Join(
                    ctx.Spccaldata.Where(t=>t.ExcludeFlag!="Y"),
                    a => new { f=a.Factory,id=a.ChartId,hs=a.HistSeq,us=a.UnitSeq},
                    b => new { f = b.Factory, id = b.ChartId, hs = b.HistSeq, us = b.UnitSeq },
                    (a, b) => new 
                    {
                        a
                    } ).OrderBy(t=>t.a.HistSeq).ThenBy(t=>t.a.UnitSeq).ThenBy(t=>t.a.ValueSeq).ToList();

取值: 

View_EDC_Data_Out.unit_list[index].factory= strQery[index].a.Factory;

 

© 著作权归作者所有

_Somuns
粉丝 6
博文 293
码字总数 383316
作品 0
闵行
程序员
私信 提问
为什么说 LINQ 要胜过 SQL

如果你还没有沉溺于 LINQ,就会想这有啥大惊小怪的。SQL 并没有坏掉,为什么还要对它进行修补呢? 为什么我们还需要另外一种查询语言呢? 流行的说法是 LINQ 同 C#(或者 VB)集成在了一起,故...

oschina
2017/02/22
11.3K
42
LINQ使用的一点心得

其实早在好几年前就知道LINQ这个东西,但我学习新技术从来都不会盲目跟从,因为这样只会浪费宝贵的时间和精力,还有可能给公司业务带来损失。有些新技术还没发展就被淘汰了,因此我只学习那些...

晨曦之光
2012/04/26
243
0
2.Linq初体验 Linq2SQL示例(原创)

Linq2SQL只是Linq中的一个很小的功能部分,我们今天就来看看用Linq如何对数据库进行增删查改的操作. 我的测试环境是:WIN7 + VS2008 + SQL2005 要想实现用Linq对数据库进行操作,我们要做的事情...

老朱教授
2017/10/01
0
0
自己在开发中积累的写SQL的时候的模式

举例一:假如有三张表,老师表,学生表,课程表。并且三张表只能按照ID来唯一标识。三张表中老师表和学生表直接关联,存在一对多的关系;学生表和课程分数直接关联,存在一对多的关系;现在要...

ChinaHYF
2016/12/05
15
0
11、SQL Server 视图、数据库快照

原文:11、SQL Server 视图、数据库快照 SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集。只有当视图上建立了索引后,才会具体化。 视图可以筛选和处理数据,而不是...

杰克.陈
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

BlockLang 0.3.0 发布啦

BlockLang 官网:https://blocklang.com Block Lang 0.3.0 引入一个新概念:组件市场。 拼装软件时使用的零部件统称为组件。所有组件在组件市场中统一管理,包括 Block Lang 的内置组件。 组...

blocklang
52分钟前
2
0
OSChina 周日乱弹 —— 请务必让我分担他们的痛苦!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy :分享石元丈晴的单曲《Why》: 《Why》- 石元丈晴 手机党少年们想听歌,请使劲儿戳(这里) @一代码哥 :当他妈狗屁的程序员,天天...

小小编辑
今天
471
6
php 遇到 No input file specified的解决方法

(一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.force_redirect = 1 去掉前面分号,把后面的1...

chenhongjiang
今天
11
0
MySQL 基础

一、常用命令 在命令行中,配置好环境变量后,通过cmd可以直接进入mysql命令行模式,同时列举几种常用命令 # 进入mysql数据库,密码可以先不写,打完-p后再输入,防止被别人看到mysql -u账...

华山猛男
今天
6
0
简单的博客系统(四)Django请求HTML页面视图信息--基于函数的视图

1. 编写用于查询数据的功能函数 应用目录 下的 views.py 文件通常用于保存响应各种请求的函数或类 from django.shortcuts import renderfrom .models import BlogArticles# Create your ...

ZeroBit
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部