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

2018-06-22 07:46:06来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

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

背景:

在做百度地图电子围栏的时候,一条围栏内包含人员的设置是直接通过更新围栏表(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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Swashbuckle Swagger组件扩展

下一篇:Google Review中Zlib.Portable报错的一种排查解决方案