说明:下面实例都是我进行项目开发时的真实部分代码,毫无保留

一、数据表的关联计算

//把当前年度的分差计算出来,建立两个关联的数据表

try

{

using(TransactionScope scope=new TransactionScope())

{

zy_admin dq_gly = Session["stjBEF985E"] as zy_admin;//只能显示当前管理员的设置

int nd = DateTime.Now.Year;

var db_qn = from aa in sjklj.Db_fszh

where aa.dwid == dq_gly.dwid

&& aa.nd == nd - 1

select aa;//去年

var db_jn = from aa in sjklj.Db_fszh

where aa.dwid == dq_gly.dwid

&& aa.nd == nd

select aa;//今年

//转换成dataset ,list

/*

List<Db_fszh> l_qn = db_qn.ToList<Db_fszh>();

List<Db_fszh> l_jn = db_jn.ToList<Db_fszh>();

//同表联合查询

var cx_jn = from aa in l_jn

join bb in l_qn on aa.pc equals bb.pc

select aa;

*/

//关联的,运算是批量计算,例如只关联pc,分差为去年文理科同批次之和减去今年文理科同批次之和

var cx_jn = from aa in db_jn

join bb in db_qn

on aa.pc+aa.lb equals bb.pc+bb.lb

select new

{

ID = aa.ID,

pc = aa.pc,

fc = bb.fs - aa.fs

};

//更新今年的fc字段

foreach (var kk in cx_jn)

{

sjklj.Db_fszh.Where(aa => aa.ID == kk.ID).First().fc = kk.fc;

}

sjklj.SaveChanges();

scope.Complete();

layeriujq.Msg("分差修改成功!", "1", "3000", this.Page);

}

}

catch

{

layeriujq.Msg("分差修改成功!","2", "3000", this.Page);

}

二、关于null值得处理

先看看网上查询到的解决方案

linq查询某个字段为null的数据
如tb_flag 数据结构如下
flag int null

如何用linq查询flag为null的数据

flag==null 生成的sql 语句为 where flag=null sql里面貌似 flag is null才能查询出null的数据。 求解答。

------解决方案--------------------
可空类型 用 Nullable<T>.Equals(字段,值)
var query=from f in db.tb_flag
where Nullable<int>.Equals(f.flag,null) select f; 
------解决方案--------------------
flag==null
=>
flag==DBNull.Value 
------解决方案--------------------
var query=from f in db.tb_flag
where flag==DBNull.Value select f; 
------解决方案--------------------
探讨

可空类型 用 Nullable<T>.Equals(字段,值)
var query=from f in db.tb_flag
where Nullable<int>.Equals(f.flag,null) select f;

下面具体在项目中的应用

try
{
zjh = int.Parse(this.tbx_zjh.Text.Trim());
}
catch
{
zjh = null;
}

try
{
lqrs = int.Parse(this.tbx_lqrs.Text.Trim());
}
catch
{
lqrs = null;
}

ispk = this.chk_pk.Checked;

try
{
zdf =double.Parse(this.tbx_zdf.Text.Trim());
}
catch
{
zdf = null;
}

try
{
zgf =double.Parse(this.tbx_zgf.Text.Trim());
}
catch
{
zgf = null;
}

try
{
pjf =double.Parse(this.tbx_pjf.Text.Trim());
}
catch
{
pjf = null;
}

try
{
lqfs =double.Parse(this.tbx_lqfs.Text.Trim());
}
catch
{
lqfs = null;
}
//验证输入有效性完毕,开始判断是否重复加入
try
{
zy_admin dq_gly = Session["stjBEF985E"] as zy_admin;

/*
var cx_xxzy = from aa in sjklj.zy_school
where aa.dwid == dq_gly.dwid
&& aa.dm == dh && aa.xxmc == xxmc && aa.lb == lb && aa.pc == pc
&& aa.pjf == pjf && aa.lqfs == lqfs && aa.zgf == zgf && aa.zdf == zdf
&& aa.zymc == zymc && aa.ispk==ispk
select aa;
*/

/*
var cx_xxzy = from aa in sjklj.zy_school
where aa.dwid == dq_gly.dwid
&& aa.dm =="2153" && aa.xxmc =="辽宁工程技术大学" && aa.lb =="理科" && aa.pc =="贫困专项本科"
&& aa.pjf ==533 && aa.lqfs ==525
&& aa.ispk ==true
select aa;
*/

var cx_xxzy = from aa in sjklj.zy_school
where aa.dwid == dq_gly.dwid
&& aa.dm == dh && aa.xxmc == xxmc && aa.lb == lb && aa.pc == pc
&& (aa.pjf == pjf || Nullable<double>.Equals(aa.pjf, null)) &&
(aa.lqfs == lqfs || Nullable<double>.Equals(aa.lqfs, null))
&& (aa.zgf == zgf || Nullable<double>.Equals(aa.zgf, null)) &&
(aa.zdf == zdf || Nullable<double>.Equals(aa.zdf, null))
&& aa.zymc == zymc && aa.ispk == ispk
select aa;

//无法判断重复?原因查明,对于null,==null 的无法判断,必须用nullable进行对象比较
if(cx_xxzy.Count()>0)
{
layeriujq.Msg("该学校或专业已经添加", "2", "3000", this.Page);
return;
}

linq查询数值为null的问题以及数据表的关联计算问题的更多相关文章

  1. Linq 查询结果 可能遵循 2 º,2¹,2 ²,......增长计算

    static void Main(string[] args) { , , , , , , , , }; var obj = from item in array orderby item ascen ...

  2. oracle表空间查询维护命令大全之中的一个(数据表空间)史上最全

          表空间是数据库的逻辑划分,一个表空间仅仅能属于一个数据库. 全部的数据库对象都存放在建立指定的表空间中.但主要存放的是表, 所以称作表空间.在oracle 数据库中至少存在一个表空间.即S ...

  3. Python版的数据库查询构造器、ORM及动态迁移数据表。

    Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orat ...

  4. MySQL数据库查询某个库下有几张数据表

    如果统计某数据库中存在多少张数据表,使用如下SQL检索语句即可: SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES ...

  5. 1.3 LINQ查询

    LINQ最具突破性的优势在于将文本查询与对象操作完美集成,它让查询数据和操作对象一样安全和轻松.查询(Query)是LINQ的核心概念之一. 传统意义上的数据查询语言,通常是比较易懂,具有一定语义的文 ...

  6. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  7. LINQ查询表达式(5) - LINQ Null值处理&异常处理

    查询表达式中处理Null值 此示例演示如何处理源集合中可能的 null 值. 诸如 IEnumerable<T> 等对象集合可能包含值为 null 的元素. 如果源集合为 null 或包含 ...

  8. LINQ查询返回DataTable类型

    个人感觉Linq实用灵活性很大,参考一篇大牛的文章LINQ查询返回DataTable类型 http://xuzhihong1987.blog.163.com/blog/static/267315872 ...

  9. [LINQ]查询关键字

    摘自https://msdn.microsoft.com/zh-cn/library/bb310804.aspx,方便以后翻阅. from子句 查询表达式必须以 from 子句开头.另外,查询表达式还 ...

随机推荐

  1. Ch05 类 - 练习

    1. 改进5.1节的Counter类,让它不要在Int.MaxValue是变成负数. class Counter{     private var value = Int.MaxValue     d ...

  2. 大数据小视角3:CarbonData,来自华为的中国力量

    连续两篇文章都聊了不同的存储格式,这篇我们继续深入来看看在存储格式的演变之上有什么新的"黑科技".华为公司在2016年开源了类parquet的列存格式:CarbonData,并且贡 ...

  3. linux----------centos6.4安装完了以后敲ifconfig,没有局域网ip。解决如下

    1.vim /etc/sysconfig/network-scripts/ifcfg-eth0 进入linux然后进入这个文件里面如下: DEVICE=eth0 HWADDR=00:0C:29:92: ...

  4. CentOS 7 MariaDB-MHA

    关于MHA    MHA(Master High Availability)是一款开源的mysql高可用程序,目前在mysql高可用方面是一个相对成熟的解决方案.MHA 搭建的前提是MySQL集群中已 ...

  5. Python之多进程&异步并行

    由于python的gil,多线程不是cpu密集型最好的选择 多进程可以完全独立的进程环境中运行程序,可以充分的利用多处理器 但是进程本身的隔离带来的数据不共享也是一个问题,而且线程比进程轻量 impo ...

  6. Delphi7使用一段时间后抽风提示注册

    今天在单位用电脑接自己的移动硬盘,一打开资源管理器就卡死,删除硬盘总是提示用程序在使用,反复试了几次,老样子.很是窝火.干脆直接关机电脑,桌面上还有开着的Delphi编译器,重新开机!开机后一打开编译 ...

  7. 2440 裸机学习 点亮LED

    1.首先需要知道 led 是受哪一个gpio口控制 从上图可以看出,两个led灯是受GPF4 GPF5控制的,低电平有效. 2.怎么控制GPF4 GPF5 通过2440的芯片手册可以看出,需要设置GP ...

  8. java并发之线程间通信

    1.volatile 关键字 java 支持多个线程同时访问一个对象或对象的成员变量,而每个线程拥有这个变量的拷贝,虽然对象或成员变量分配的内存在共享内存,但每个执行的线程可以拥有一份拷贝,可以提高程 ...

  9. IP通信基础学习第三周(上)

    TCP的连接情况有:同时打开,同时关闭,拒绝连接,异常终止连接. TCP流量控制的折中方法是滑动窗口协议,且TCP标准强烈不赞成发送窗口沿向后缩回. 在滑动窗口中,当A发送了11个字节的数据时,P3- ...

  10. Poj3624 Charm Bracelet (01背包)

    题目链接:http://poj.org/problem?id=3624 Description Bessie has gone to the mall's jewelry store and spie ...