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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.Xpo;
using DevExpress.Data.Filtering;
using System.Collections;
using DevExpress.XtraEditors;
using DevExpress.Data.Linq.Helpers;
using DevExpress.XtraEditors.Filtering;
using DevExpress.XtraEditors.Repository;
using DevExpress.Data.Filtering.Helpers;
using DevExpress.Data.Linq; namespace DXSample
{
public partial class Form1 : XtraForm
{
public Form1()
{
InitializeComponent();
} IQueryable<Products> source;
private void OnLoad(object sender, EventArgs e)
{
var products = new XPQuery<Products>(unitOfWork1); source = from product in products
where product.Quantity >=
select product; gridControl1.DataSource = source.ToList();
CreateFilterColumns();
} private void CreateFilterColumns()
{
filterControl1.FilterColumns.Add(new UnboundFilterColumn("ProductID", "ProductID", typeof(int),
new RepositoryItemSpinEdit(), FilterColumnClauseClass.Generic));
filterControl1.FilterColumns.Add(new UnboundFilterColumn("Quantity", "Quantity", typeof(int),
new RepositoryItemSpinEdit(), FilterColumnClauseClass.Generic));
filterControl1.FilterColumns.Add(new UnboundFilterColumn("Price", "Price", typeof(decimal),
new RepositoryItemSpinEdit(), FilterColumnClauseClass.Generic));
filterControl1.FilterColumns.Add(new UnboundFilterColumn("ProductName", "ProductName", typeof(string),
new RepositoryItemTextEdit(), FilterColumnClauseClass.String));
filterControl1.FilterColumns.Add(new UnboundFilterColumn("Discontinued", "Discontinued", typeof(bool),
new RepositoryItemCheckEdit(), FilterColumnClauseClass.Generic));
} private void OnUpdateFilter(object sender, EventArgs e)
{
gridControl1.BeginUpdate();
try
{
CriteriaToExpressionConverter converter = new CriteriaToExpressionConverter();
IQueryable<Products> filteredData = source.AppendWhere(converter, filterControl1.FilterCriteria) as IQueryable<Products>;
gridControl1.DataSource = null;
gridControl1.DataSource = filteredData.ToList();
}
finally
{
gridControl1.EndUpdate();
}
} private void OnSaveButtonClick(object sender, EventArgs e)
{
try
{
unitOfWork1.CommitChanges();
}
catch (Exception exc){
MessageBox.Show(exc.ToString());
unitOfWork1.ReloadChangedObjects();
}
}
}
}
using System;
using DevExpress.Xpo;
namespace DXSample
{
public class Products : XPLiteObject
{
int fProductID;
[Key(true)]
public int ProductID
{
get { return fProductID; }
set { SetPropertyValue<int>("ProductID", ref fProductID, value); }
} int fQuantity;
public int Quantity
{
get { return fQuantity; }
set { SetPropertyValue<int>("Quantity", ref fQuantity, value); }
} decimal fPrice;
public decimal Price
{
get { return fPrice; }
set { SetPropertyValue<decimal>("Price", ref fPrice, value); }
} string fProductName;
public string ProductName
{
get { return fProductName; }
set { SetPropertyValue<string>("ProductName", ref fProductName, value); }
} bool fDiscontinued; public bool Discontinued
{
get { return fDiscontinued; }
set { SetPropertyValue<bool>("Discontinued", ref fDiscontinued, value); }
} public Products(Session session) : base(session) { }
public Products() : base(Session.DefaultSession) { }
public override void AfterConstruction() { base.AfterConstruction(); }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DevExpress.Xpo;
using DevExpress.Xpo.DB;
using DevExpress.Skins; namespace DXSample
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
string connectionString = AccessConnectionProvider.GetConnectionString("MyDB.mdb");
XpoDefault.DataLayer = XpoDefault.GetDataLayer(connectionString, AutoCreateOption.DatabaseAndSchema);
XpoDefault.Session = null; CreateData(); SkinManager.EnableFormSkins();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
} static void CreateData()
{
using (UnitOfWork uow = new UnitOfWork())
{
if (uow.FindObject<Products>(null) == null)
{
Products product = new Products(uow);
product.Discontinued = false;
product.Price = ;
product.Quantity = ;
product.ProductName = "Orange"; product = new Products(uow);
product.Discontinued = true;
product.Price = ;
product.Quantity = ;
product.ProductName = "Apple"; product = new Products(uow);
product.Discontinued = false;
product.Price = ;
product.Quantity = ;
product.ProductName = "Banana"; product = new Products(uow);
product.Discontinued = true;
product.Price = ;
product.Quantity = ;
product.ProductName = "Grape"; product = new Products(uow);
product.Discontinued = false;
product.Price = ;
product.Quantity = ;
product.ProductName = "Garnet"; product = new Products(uow);
product.Discontinued = true;
product.Price = ;
product.Quantity = ;
product.ProductName = "Mandarin"; product = new Products(uow);
product.Discontinued = false;
product.Price = ;
product.Quantity = ;
product.ProductName = "Kiwi"; uow.CommitChanges();
}
}
}
}
}

示例地址: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. 正则表达式/g与/i及/gi的意义

    g: 全局匹配 i: 忽略大小写 gi: 全局匹配 + 忽略大小写

  2. c++的构造函数

    我刚学的知识:c++的构造函数.在在此之前一直都处于迷惑之中,现在怕忘.所以赶紧把他写下来,用来以后复习,可能有错误的地方,请大牛们指出来.c++知识相对与c来说更加抽象,但真明白了,也就那一回事.这 ...

  3. JDBC基础与连接sql2012

    JDBC简介 JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成. 组成JDBC的2个包: java.sql javax.sql 以上2个包 ...

  4. hdu5722 Jewelry

    题意就是说问有多少个区间,其中有至少一种种类的宝珠出现的次数恰好为x次.            先预处理出每一个位置的宝珠下一个出现与其同种类的宝珠位置next和上一个出现与其同种类的位置pre   ...

  5. 夺命雷公狗-----React---20--实现验证码大写

    <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...

  6. 优化 bulk insert

    https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/

  7. asp.net5 操作Cookie

    写入Cookie var CookieOption = new CookieOptions(); CookieOption.Path = "/"; //on localhost, ...

  8. Struts2相关面试题

    Struts2面试题 1.struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心 ...

  9. MVC 中301永久重定向

    public class PermanentRedirectResult : ViewResult { public string Url { get; set; } public Permanent ...

  10. python学习笔记之基础二(第二天)

    1.编码转换介绍        unicode是最底层.最纯的,会根据终端的编码进行转化展示 一般硬盘存储或传输为utf-8(因为省空间.省带宽),读入内存中为unicode,二者如何转换 a = ' ...