linq查询数值为null的问题以及数据表的关联计算问题
说明:下面实例都是我进行项目开发时的真实部分代码,毫无保留
一、数据表的关联计算
//把当前年度的分差计算出来,建立两个关联的数据表
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的问题以及数据表的关联计算问题的更多相关文章
- Linq 查询结果 可能遵循 2 º,2¹,2 ²,......增长计算
static void Main(string[] args) { , , , , , , , , }; var obj = from item in array orderby item ascen ...
- oracle表空间查询维护命令大全之中的一个(数据表空间)史上最全
表空间是数据库的逻辑划分,一个表空间仅仅能属于一个数据库. 全部的数据库对象都存放在建立指定的表空间中.但主要存放的是表, 所以称作表空间.在oracle 数据库中至少存在一个表空间.即S ...
- Python版的数据库查询构造器、ORM及动态迁移数据表。
Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orat ...
- MySQL数据库查询某个库下有几张数据表
如果统计某数据库中存在多少张数据表,使用如下SQL检索语句即可: SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES ...
- 1.3 LINQ查询
LINQ最具突破性的优势在于将文本查询与对象操作完美集成,它让查询数据和操作对象一样安全和轻松.查询(Query)是LINQ的核心概念之一. 传统意义上的数据查询语言,通常是比较易懂,具有一定语义的文 ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- LINQ查询表达式(5) - LINQ Null值处理&异常处理
查询表达式中处理Null值 此示例演示如何处理源集合中可能的 null 值. 诸如 IEnumerable<T> 等对象集合可能包含值为 null 的元素. 如果源集合为 null 或包含 ...
- LINQ查询返回DataTable类型
个人感觉Linq实用灵活性很大,参考一篇大牛的文章LINQ查询返回DataTable类型 http://xuzhihong1987.blog.163.com/blog/static/267315872 ...
- [LINQ]查询关键字
摘自https://msdn.microsoft.com/zh-cn/library/bb310804.aspx,方便以后翻阅. from子句 查询表达式必须以 from 子句开头.另外,查询表达式还 ...
随机推荐
- 商务通服务器版LR_Data目录下相关配置文件
SiteSetting.config 这个文件保存权限角色(超级管理员,管理员等)角色权限.弹窗图片.客服的自动应答等内容. operatorsql8.config SQLite 数据库文件,保存登录 ...
- JAVA:IDEA使用Junit(3)
1.配置 File ——> Project Structure ——> Libraries ——> + ——>搜索Junit类库 确认ok即可 2.编辑项目 选择创建 配置生成 ...
- ASP.NET CORE 2.0 Uses SignalR Technology
https://www.codeproject.com/Articles/1208322/ASP-NET-CORE-Uses-SignalR-Technology
- HDU 2586 How far away(dfs+邻接表)
How far away [题目链接]How far away [题目类型]dfs+邻接表 &题意: 题目大意:一个村子里有n个房子,这n个房子用n-1条路连接起来,接下了有m次询问,每次询问 ...
- Kubernetes 网络改进的三项实践分享
自研CNI IPAM插件 解决K8s功能问题 首先,在功能方面,Kubernetes 网络模型由于IP不固定,无法对IP资源进行精细管控,无法使用基于IP的监控和基于IP的安全策略,此外,一些IP发现 ...
- ucli tcl cmd
ucli接口与tcl 8.6兼容:vcs中要调用ucli接口,执行脚本,必须在compile的时候,加入debug的权限: -debug,-debug_pp,-debug_all,-debug_acc ...
- 用javaScript对页面元素进行显示和隐藏
将显示元素进行隐藏 用document.getElementById("ID名").hidden=ture;根据页面元素ID名获得页面元素值,进而将其属性设置成隐藏. 将隐藏元素进 ...
- javascript Template tmpl
前两天写前端遇到很多table 和 表单需要拼接的问题 , 一堆的字符串 , 页面显得冗长,又不好维护.于是有了下文. 话不多说,上代码: 首先引用一个js文件: <script src=&qu ...
- 一致性hash的实现
原文:https://blog.csdn.net/u011305680/article/details/79721030 1.不带虚拟节点的 package hash; import java.uti ...
- error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
centos7.5 重启mysql报错 问题: [root@db01-51 ~]# mysqladmin -uroot -p123 -S /data/3307/data/mysql.sock shut ...