容斥原理及SQL in关键字在EF中的应用

突然意识到文字的重要性,于是开始写了第一个篇博客,博客目的紧紧为记录,以便温故。

同时也希望抛砖能达到引玉的作用,欢迎各位来发表自己的感想与想法,以此达到相互学习促进!

背景:

在做百度地图电子围栏的时候,一条围栏内包含人员的设置是直接通过更新围栏表(Fence)内FenceUser字段(数据格式:1,3,7)来实现的,同时更新User表对应ID(1,3,7)的是否设置电子围栏的标识FenceFlag(0 or 1)

所以需要比较前台传过来的对应ID值和数据库中ID对应值的非公有部分再去统一把User表的FenceFlag标记取反

 1 DBConn db = new DBConn();
 2             var fencelist = (from b in db.Fence.AsNoTracking() where b.fenceId == fenceID select b).ToList();
 3             string fenceusers = fencelist[0].fenceUsers;
 4             string[] users = fenceusers.Split(',');
 5             string[] arraymembers = ArraymembersToid.Split(',');
 6             var listTemp = users.Concat(arraymembers).Except(users.Intersect(arraymembers)).ToList();
 7             var list = listTemp.Select<string, int>(q => Convert.ToInt32(q));
 8             var userFenceFlag = db.Users.Where(p => list.Any(a => a.Equals(p.id))).ToList();
 9             if (userFenceFlag.Count > 0)
10             {
11                 foreach (Users user in userFenceFlag)
12                 {
13                     user.FenceFlag = -(user.FenceFlag - 1);
14                 }
15                 db.SaveChanges();
16 
17             }
View Code

关键字:

集合

Intersect:交集

Except:差集(A差B指的是A中与B中的不同而非AB全部的不同)

Concat:合集(AB全部值,包含重复)

EF

Any:类似于SQL中的IN

 

转载于:https://www.cnblogs.com/laman-chen/p/6553315.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值