我首先建一个表,这个表有如下字段
user
(id int 自增类型,
depname varchar
)
最近在使用linq时,遇到一个问题,就是能不能可以写出下面效果的linq语句
select * from user where depname like '%蔡%工%献%'
在网上查了一下资料,差不多都是这样的效果
DAL.HISEntities model = new DAL.HISEntities();
string p1="蔡献";
var p=model.User.where(c=>c.depname.Contains(p1));
大家如果认真一下就会发现,这条linq语句是不达到上面的sql语句效果的,
我们该这么办呢?
我们先不考虑别的东西,我们来写一个算法
有一个字符串string n=”蔡常常丰富经济局“,判断string m=”常常局“在不在里面n
里面,这个有很多方法,大家可以自己想想,这是我自己的算法
public bool likeString(string containsstring, string mitem)
{
List<int> list = new List<int>();
foreach (var item in containsstring)
{
if (mitem.Contains(item))
{
list.Add(1);
}
}
if (list.Count(c => c == 1) != 0)
{
return true;
}
else
{
return false;
}
}
解决掉这个问题,下面的问题就比较容易解决
我们是不是可以把user表全部查出来
这个是关键,如果想通这点,那么,模糊查询就可以写出来
这是我的,呵呵
DAL.HISEntities model = new DAL.HISEntities();
var p = model.User.Select(c=>c.Depname);///先把整张表查出来
Common.Helper helper = new Common.Helper();
///我自己写的帮助类,里面有likeString方法
List<string> list=new List<string>();
foreach (var item in p)
{
if (helper.likeString(TextBox1.Text.Trim(),item))///自己看懂,关键点就在这里
{
list.Add(item);
}
}
var p2 = model.User.Join(list.AsEnumerable(), c => c.Depname, y => y, (m, n) => new { m.Id,
m.Depname});
GridView1.DataSource = p2;
GridView1.DataBind();