EF或LINQ 查询时使用IN并且根据列表自定义排序方法
EF和LINQ改变了原有的手写SQL时期的一些编码方法,并且增强了各数据库之间的移植性简化了开发时的代码量和难度,由于很多人不熟,经常会碰到一些写SQL语句时经常会用到的一些方法,而使用EF或LINQ确不知道如何使用,其实EF和LINQ帮我们想到的有很多,看大家如何利用好,下面讲几个项目开发中碰到过的问题吧
1、经常开发中会碰到查询一个包含在一个数组中的列表
例如:select * from User where id in(1,2,3,4,5);
如果在EF中如何查询呢
int[] list={1,2,3,4,5};//要查询的数组列表
DBEntities db=new DBEntities();//EF访问数据库的对象
var ulist=db.User.Where(u=>list.Contains(u.id));
LINQ
var ulist=from ul in db.User where list.Contains(ul.id) select ul;
2、如果需要按照数组中的顺序将查询出来的数据排序怎么办
var ulist=db.User.Where(u=>list.Contains(u.id)).ToArray();
var result=ulist.OrderBy(a=>Array.IndexOf(list,a.id)).ToList();
LINQ也是一样
如果一定要在数据库中排序好了再查询出来,也有方法
var ulist=db.User.Where(u=>list.Contains(u.id)).OrderBy(o=>SqlFunctions.CharIndex("1,2,3,4,5",o.id));
怎么样,方便吧
SqlFunctions这个静态类里面提供了很多原生SQL的方法,大家可以进行尝试