首页 新闻 会员 周边

C# EF,这个是个分页查询的方法,方法测试已经有数据了,如果想传入搜索条件怎么写?

0
悬赏园豆:10 [已解决问题] 解决于 2019-10-31 11:01
复制代码
下面的方法测试是可以获得数据的,
现在想传入搜索条件应该怎么写?EF新手。
例如根据id、name、time 多搜索条件搜索,参数id、name、time如何加进查询条件
    public ActionResult jsondata()
    {
        int page = Request.QueryString["page"] == null ? 1 : int.Parse(Request.QueryString["page"]);
        int limit = Request.QueryString["limit"] == null ? 5 : int.Parse(Request.QueryString["limit"]);
        var count = db.Kaoqins.ToList().Count;
        var datalist = db.Kaoqins.ToList().Skip((page - 1) * limit).Take(limit);
        var jsonstr = new
        {
            count = count,
            code = 0,
            msg = "",
            data = datalist
        };
        return Json(jsonstr, JsonRequestBehavior.AllowGet);
    }

 

大da脸的主页 大da脸 | 初学一级 | 园豆:73
提问于:2019-10-30 22:25
< >
分享
最佳答案
0

var datalist=db.Kaoqins.Where(e=>e.id.Equals("参数id")&&e.name.Contains("参数name")).ToList();

收获园豆:10
你小子嚣张呀 | 小虾三级 |园豆:630 | 2019-10-31 10:16

嗯  您写的这个我是知道的,

我举个例子吧,条件追加,

stringBuilder str=new stringBuilder();

if(name!="")

str.append("and name=****")

if(time!="")

str.append("and time=****");

这是我的意思

EF如果要使用类似这种情况条件追加应该怎么写?

大da脸 | 园豆:73 (初学一级) | 2019-10-31 10:22

@大da脸: var datalist=db.Kaoqins.ToList();
首先 datalist是全部的数据,已经拿到缓存中了
然后根据你的参数是否为空进行判断 如下
if(!string.IsNullOrWhiteSpace("你的参数"))
{
datalist = datalist.Where(e=>e.id.Equals("参数id"));
}

你小子嚣张呀 | 园豆:630 (小虾三级) | 2019-10-31 10:47

@wwr01: 

如果有多个条件的判断,这种写法

datalist = datalist.Where(e=>e.id.Equals("参数id"));

能吧所有的条件都拼接上吗?

大da脸 | 园豆:73 (初学一级) | 2019-10-31 10:48

@大da脸: 你需要通过传进来的参数是否为空进行判断
多个参数 就写多个if 就行了 如下
if(!string.IsNullOrWhiteSpace("参数id"))
{
datalist = datalist.Where(e=>e.id.Equals("参数id"));
}
if(!string.IsNullOrWhiteSpace("参数name"))
{
datalist = datalist.Where(e=>e.name.Equals("参数name"));
}

你小子嚣张呀 | 园豆:630 (小虾三级) | 2019-10-31 10:54

@wwr01: 非常感谢解答,这样能吧所有的条件都拼接上吗?还是只能有一个条件起作用?

大da脸 | 园豆:73 (初学一级) | 2019-10-31 10:56

@大da脸: 只要传进来的参数不为空都是可以的
参数不为空 是对datalist筛选,是起作用的
你返回数据 是返回datalist

你小子嚣张呀 | 园豆:630 (小虾三级) | 2019-10-31 11:00

@wwr01: 好的 终于明白了,这才是最关键的疑问,非常感谢

大da脸 | 园豆:73 (初学一级) | 2019-10-31 11:00
其他回答(2)
0

太麻烦了,filter直接用Odata现成模块吧,省太多无用的人工代码了。

花飘水流兮 | 园豆:13560 (专家六级) | 2019-10-30 23:12

有例子吗?我就是因为不会才问的

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-10-31 08:06
0

db.Kaoqins.ToList()中的tolist已经将所有数据库数据查询到内存中了,如果数据不多也没什么问题

查询条件直接调用where。伪代码where(t=>t.name.Contians(条件)&&t.time>=条件&&t.time<=条件)

通信的搞程序 | 园豆:1747 (小虾三级) | 2019-10-31 08:49

嗯  您写的这个我是知道的,

我举个例子吧,条件追加,

stringBuilder str=new stringBuilder();

if(name!="")

str.append("and name=****")

if(time!="")

str.append("and time=****");

这是我的意思

EF如果要使用类似这种情况条件追加应该怎么写?

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-10-31 10:23

@大da脸: where(t=>).where(t=>)

支持(0) 反对(0) 通信的搞程序 | 园豆:1747 (小虾三级) | 2019-10-31 10:24

@通信的搞程序: 

if(name!="")
  where(t=>***)
if(time!="")
  where(t=>***)
是这样吗?我不懂这个语法所以能不能请您写详细点
因为有这个if参数的判断,不是一次追加完的,当有值的时候才追加
支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-10-31 10:26

@大da脸:就是这样。

支持(0) 反对(0) 通信的搞程序 | 园豆:1747 (小虾三级) | 2019-10-31 10:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册