How to convert the CriteriaOperator to a lambda expression, so, the latter expression can be used in the IQueryable source

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using DevExpress.Xpo;
  10. using DevExpress.Data.Filtering;
  11. using System.Collections;
  12. using DevExpress.XtraEditors;
  13. using DevExpress.Data.Linq.Helpers;
  14. using DevExpress.XtraEditors.Filtering;
  15. using DevExpress.XtraEditors.Repository;
  16. using DevExpress.Data.Filtering.Helpers;
  17. using DevExpress.Data.Linq;
  18.  
  19. namespace DXSample
  20. {
  21. public partial class Form1 : XtraForm
  22. {
  23. public Form1()
  24. {
  25. InitializeComponent();
  26. }
  27.  
  28. IQueryable<Products> source;
  29. private void OnLoad(object sender, EventArgs e)
  30. {
  31. var products = new XPQuery<Products>(unitOfWork1);
  32.  
  33. source = from product in products
  34. where product.Quantity >=
  35. select product;
  36.  
  37. gridControl1.DataSource = source.ToList();
  38. CreateFilterColumns();
  39. }
  40.  
  41. private void CreateFilterColumns()
  42. {
  43. filterControl1.FilterColumns.Add(new UnboundFilterColumn("ProductID", "ProductID", typeof(int),
  44. new RepositoryItemSpinEdit(), FilterColumnClauseClass.Generic));
  45. filterControl1.FilterColumns.Add(new UnboundFilterColumn("Quantity", "Quantity", typeof(int),
  46. new RepositoryItemSpinEdit(), FilterColumnClauseClass.Generic));
  47. filterControl1.FilterColumns.Add(new UnboundFilterColumn("Price", "Price", typeof(decimal),
  48. new RepositoryItemSpinEdit(), FilterColumnClauseClass.Generic));
  49. filterControl1.FilterColumns.Add(new UnboundFilterColumn("ProductName", "ProductName", typeof(string),
  50. new RepositoryItemTextEdit(), FilterColumnClauseClass.String));
  51. filterControl1.FilterColumns.Add(new UnboundFilterColumn("Discontinued", "Discontinued", typeof(bool),
  52. new RepositoryItemCheckEdit(), FilterColumnClauseClass.Generic));
  53. }
  54.  
  55. private void OnUpdateFilter(object sender, EventArgs e)
  56. {
  57. gridControl1.BeginUpdate();
  58. try
  59. {
  60. CriteriaToExpressionConverter converter = new CriteriaToExpressionConverter();
  61. IQueryable<Products> filteredData = source.AppendWhere(converter, filterControl1.FilterCriteria) as IQueryable<Products>;
  62. gridControl1.DataSource = null;
  63. gridControl1.DataSource = filteredData.ToList();
  64. }
  65. finally
  66. {
  67. gridControl1.EndUpdate();
  68. }
  69. }
  70.  
  71. private void OnSaveButtonClick(object sender, EventArgs e)
  72. {
  73. try
  74. {
  75. unitOfWork1.CommitChanges();
  76. }
  77. catch (Exception exc){
  78. MessageBox.Show(exc.ToString());
  79. unitOfWork1.ReloadChangedObjects();
  80. }
  81. }
  82. }
  83. }
  1. using System;
  2. using DevExpress.Xpo;
  3. namespace DXSample
  4. {
  5. public class Products : XPLiteObject
  6. {
  7. int fProductID;
  8. [Key(true)]
  9. public int ProductID
  10. {
  11. get { return fProductID; }
  12. set { SetPropertyValue<int>("ProductID", ref fProductID, value); }
  13. }
  14.  
  15. int fQuantity;
  16. public int Quantity
  17. {
  18. get { return fQuantity; }
  19. set { SetPropertyValue<int>("Quantity", ref fQuantity, value); }
  20. }
  21.  
  22. decimal fPrice;
  23. public decimal Price
  24. {
  25. get { return fPrice; }
  26. set { SetPropertyValue<decimal>("Price", ref fPrice, value); }
  27. }
  28.  
  29. string fProductName;
  30. public string ProductName
  31. {
  32. get { return fProductName; }
  33. set { SetPropertyValue<string>("ProductName", ref fProductName, value); }
  34. }
  35.  
  36. bool fDiscontinued;
  37.  
  38. public bool Discontinued
  39. {
  40. get { return fDiscontinued; }
  41. set { SetPropertyValue<bool>("Discontinued", ref fDiscontinued, value); }
  42. }
  43.  
  44. public Products(Session session) : base(session) { }
  45. public Products() : base(Session.DefaultSession) { }
  46. public override void AfterConstruction() { base.AfterConstruction(); }
  47. }
  48. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Forms;
  5. using DevExpress.Xpo;
  6. using DevExpress.Xpo.DB;
  7. using DevExpress.Skins;
  8.  
  9. namespace DXSample
  10. {
  11. static class Program
  12. {
  13. /// <summary>
  14. /// The main entry point for the application.
  15. /// </summary>
  16. [STAThread]
  17. static void Main()
  18. {
  19. string connectionString = AccessConnectionProvider.GetConnectionString("MyDB.mdb");
  20. XpoDefault.DataLayer = XpoDefault.GetDataLayer(connectionString, AutoCreateOption.DatabaseAndSchema);
  21. XpoDefault.Session = null;
  22.  
  23. CreateData();
  24.  
  25. SkinManager.EnableFormSkins();
  26. Application.EnableVisualStyles();
  27. Application.SetCompatibleTextRenderingDefault(false);
  28. Application.Run(new Form1());
  29. }
  30.  
  31. static void CreateData()
  32. {
  33. using (UnitOfWork uow = new UnitOfWork())
  34. {
  35. if (uow.FindObject<Products>(null) == null)
  36. {
  37. Products product = new Products(uow);
  38. product.Discontinued = false;
  39. product.Price = ;
  40. product.Quantity = ;
  41. product.ProductName = "Orange";
  42.  
  43. product = new Products(uow);
  44. product.Discontinued = true;
  45. product.Price = ;
  46. product.Quantity = ;
  47. product.ProductName = "Apple";
  48.  
  49. product = new Products(uow);
  50. product.Discontinued = false;
  51. product.Price = ;
  52. product.Quantity = ;
  53. product.ProductName = "Banana";
  54.  
  55. product = new Products(uow);
  56. product.Discontinued = true;
  57. product.Price = ;
  58. product.Quantity = ;
  59. product.ProductName = "Grape";
  60.  
  61. product = new Products(uow);
  62. product.Discontinued = false;
  63. product.Price = ;
  64. product.Quantity = ;
  65. product.ProductName = "Garnet";
  66.  
  67. product = new Products(uow);
  68. product.Discontinued = true;
  69. product.Price = ;
  70. product.Quantity = ;
  71. product.ProductName = "Mandarin";
  72.  
  73. product = new Products(uow);
  74. product.Discontinued = false;
  75. product.Price = ;
  76. product.Quantity = ;
  77. product.ProductName = "Kiwi";
  78.  
  79. uow.CommitChanges();
  80. }
  81. }
  82. }
  83. }
  84. }

示例地址:https://www.devexpress.com/Support/Center/Example/Details/E2596

如何为CriteriaOperator过滤对象转换为lambda表达式,即:linq to xpo的动态where语句的更多相关文章

  1. C# Lambda表达式和linq表达式 之 匿名对象查询接收

    很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴 对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行 条件筛选呢?常规用法我就不说 ...

  2. C#从委托、lambda表达式到linq总结

    前言 本文总结学习C#必须知道的基础知识,委托.监视者模式.常用lambda表达式.linq查询,自定义扩展方法,他们之间有什么关系呢?匿名委托是如何演变成lambda表达式,lambda再如何导出l ...

  3. entity framework 新手入门篇(1.5)-lambda表达式与linq

    在建立好了EF模型之后,先不着急使用它,在使用它之前,你还需要了解两个相关的技术,lambda表达式与linq. 作为微软C#语言中重要的语法糖-lambda表达式与LINQ,本质都是一个方法,以la ...

  4. c# in deep 之Lambda表达式于LINQ表达式结合后令人惊叹的简洁(2)

    当Lambda表达式和LINQ一起使用时,我们会发现原本冗长的代码会变得如此简单.比如我们要打印0-10之间的奇数,让其从高到低排列并求其平方根,现在只用一行代码即可完成其集合的生成,直接上代码: v ...

  5. C# 匿名委托、匿名方法、匿名对象、Lambda表达式

    一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello&quo ...

  6. C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

    1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...

  7. C++ 理解函数对象与lambda表达式

    参考<21天学通C++>第21与第22章节,对函数对象进行介绍,同时通过lambda表达式这一匿名函数对象的简洁方式加深对函数对象的理解.本篇博文的主要内容是: (1) 函数对象的概念: ...

  8. C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

    前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...

  9. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...

随机推荐

  1. 阿里 otter搭建过程整理

    1 环境说明: 本机ip 192.168.8.3 虚拟机1 ip 192.168.8.5 虚拟机2 ip 192.168.8.6 虚拟机采取桥接模式 虚拟机系统为CentOS 2.6.32-279.e ...

  2. IOS关于不同字体和不同颜色的选择

    在项目中,用到一个功能,就是不同文字和不同颜色字体选择, 界面如下:,效果如下: 这个功能主要用到了textview的几个代理办法,其中一个重要的问题就是,在英文下和英文下的不同判断方式,以及是否有追 ...

  3. Sublime Text3快捷键以及常用插件

    工若善其事,必先利其器.做为一个web前端开发人员,必须有一个得心应手的编码工具,本人推荐Sublime Text3和WebStorm,但WebStorm太过智能和耗性能了对初学者来说弊大于利,所以我 ...

  4. 论文阅读(Xiang Bai——【TIP2014】A Unified Framework for Multi-Oriented Text Detection and Recognition)

    Xiang Bai--[TIP2014]A Unified Framework for Multi-Oriented Text Detection and Recognition 目录 作者和相关链接 ...

  5. 超简单的JNI——NDK开发教程

    不好意思各位,我按照网上一些教程进行JNI开发,折腾了半天也没成功,最后自己瞎搞搞定了,其实超简单的,网上的教程应该过时了,最新版的AS就包含了NDK编译的功能,完全不用手动javah,各种包名路径的 ...

  6. GUI生成exe文件

    gui如何生成exe文件: 已经有gui.m和gui.fig文件 1 安装编译器.已经安装好了vs10的. 2 设置编译器.在matlab命令行输入mex -setup,选择安装的c编译器 3 调用编 ...

  7. CEGUI环境配置

    由于最近项目需要CEGUI做界面,于是我去下载了CEGUI源码,但是却不知道怎么搭建.网上的教程都不是很详细,不能让我们这种新手理解,经过几天折腾,终于弄好了,特此记录下来. 1.下载官网CEGUI源 ...

  8. linux 使用/proc文件系统 实现用户空间与内核模块之间通信

    项目中可能会用到用户态和内核模块之间进行通信的功能.想到linux系统本身很多通信都是通过/proc文件系统来的,比如修改网络中连接跟踪表连接数限制/proc/sys/net/netfilter/nf ...

  9. Oracle表结构修改触发视图无法正常使用问题

    一.问题描述 当对视图使用的基表进行表结构修改后,会触发视图的无效以及编译出错问题,必须重建视图解决. 二.问题再现 1.Oracle10g环境 1.1 创建视图测试用两张基表:TestTable和T ...

  10. js 中关键字 this的用法

    <1>  js中this 的用法?  (key:函数是由调用的,四种情况标红可知) (http://www.ruanyifeng.com/blog/2010/04/using_this_k ...