FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 3821|回复: 4
打印 上一主题 下一主题

表头过滤,FilteredData 如何使用 IQueryable 查询

[复制链接]
楼主
发表于 2015-3-7 21:45:44 | 显示全部楼层
不需要转换,直接在 IQueryable 中指定查询条件,其实和表格上面放一个Form进行查询是一个道理。

AppBoxPro中有很多类似的处理,比如用户列表页面:
  1. IQueryable<User> q = DB.Users; //.Include(u => u.Dept);

  2.             // 在用户名称中搜索
  3.             string searchText = ttbSearchMessage.Text.Trim();
  4.             if (!String.IsNullOrEmpty(searchText))
  5.             {
  6.                 q = q.Where(u => u.Name.Contains(searchText) || u.ChineseName.Contains(searchText) || u.EnglishName.Contains(searchText));
  7.             }

  8.             q = q.Where(u => u.Name != "admin");

  9.             //if (GetIdentityName() != "admin")
  10.             //{
  11.             //    q = q.Where(u => u.Name != "admin");
  12.             //}

  13.             // 过滤启用状态
  14.             if (rblEnableStatus.SelectedValue != "all")
  15.             {
  16.                 q = q.Where(u => u.Enabled == (rblEnableStatus.SelectedValue == "enabled" ? true : false));
  17.             }

  18.             // 在查询添加之后,排序和分页之前获取总记录数
  19.             Grid1.RecordCount = q.Count();

  20.             // 排列和数据库分页
  21.             q = SortAndPage<User>(q, Grid1);

  22.             Grid1.DataSource = q;
  23.             Grid1.DataBind();
复制代码


====
官网示例的做法 source.Clone(); 其实在实际中不可取,因为示例项目没用到数据库,必须通过这种做法
沙发
发表于 2015-3-9 10:34:22 | 显示全部楼层
Mr.Wu 发表于 2015-3-8 11:17
直接指定查询条件?不太明白。
找了个在线demo:http://fineui.com/demo_pro/default.aspx#/demo_pro/grid ...


其实就是循环,根据特定情景添加查询条件,比如对 column=Major 的简单处理(未在真实环境测试):
  1. IQueryable<User> q = DB.Users;
  2. // 遍历过滤项
  3. foreach (JObject filteredObj in Grid1.FilteredData)
  4. {
  5.         // 如果是 Major 过滤项
  6.         if (filteredObj.Value<string>("column") == "Major")
  7.         {
  8.                 // Major过滤项的值是一个数组
  9.                 JArray values = filteredObj.Value<JObject>("item").Value<JArray>("value");

  10.                 // 如果数据库中某条数据的 Major 包含在本数组中,则检索出来
  11.                 q = q.Where(u => values.Contains(u.Name));
  12.         }
  13. }
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-5-18 06:07 , Processed in 0.043286 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表