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. 优化phpstorm运行卡顿问题!

    在PHPSTORM中点击导航菜单:Help -> Edit Custom VM Options 如果是第一次点击,会提示是否新建配置文件,点击“是” 在弹出的编辑框末尾加上以下配置 -Dawt. ...

  2. Ubuntu下安装Numpy, SciPy and Matplotlib

    Python开发环境包含科学计算,需要安装NumPy, SciPy, Matplotlib.其中Matplotlib依赖于Python和NumPy.我们先安装NumPY和SciPy.  Matplot ...

  3. DNS缓存

    有DNS的地方,就有缓存. 浏览器.操作系统.Local DNS.根域名服务器,它们都会对DNS结果做一定程度的缓存.本文总结一些常见的浏览器和操作系统的DNS缓存时间. Table of Conte ...

  4. ibatis输入多个参数

    ibatis输入多个参数     在ibatis中,会发现其输入参数只能有一个,于是当出现需要进行多个输入参数的时候,就要想点办法了,我看到的有以下两种比较好的方法能够解决这个问题1) 用String ...

  5. rosetta2014/2015安装时出现INCLUDE(keyerror)错误,解决。

    错误: KeyError: 'INCLUDE' 使编译出错 解决方法: [usrname@host source]$ vim tools/build/site.settings 注释# "i ...

  6. (三)内存 SDRAM 驱动实验 (杨铸 130 页)(勉强能懂个大概)

    SDRAM 芯片讲解: 地址: 行地址 (A0-A12) 列地址 (A0-A8)    片选信号(BA0 BA1)(L-BANK)(因为SDRAM有 4片) 两片SDRAM 连线唯一区别在 UDQM ...

  7. Hotelling T2检验和多元方差分析

    1.1 Hotelling T2检验 Hotelling T2检验是一种常用多变量检验方法,是单变量检验的自然推广,常用于两组均向量的比较. 设两个含量分析为n,m的样本来自具有公共协方差阵的q维正态 ...

  8. 二十五、JDK1.5新特性---枚举

    与上篇文章介绍的相同,本文也是介绍jdk 1.5出现的新特性,本文将介绍枚举的相关用法. 在jdk 1.5 之前.Java可以有两种方式定义新类型:类和接口.对于大部分面向对象来说.这两种方法看起来似 ...

  9. Windows平板优化设置

    低于千元的windows平板,和iPad差异主要在于做工方面,以及Modern软件的欠缺,续航约5小时,但其可玩性和扩展性更好. 若将其视为平板附送了桌面电脑的功能,花费一定时间容易定制成适合个人使用 ...

  10. nodejs的初学

    1.启服务器.先server.js,再命令行输入命令node server.js,打开浏览器输入http://127.0.0.1:2016可以看到有内容输出. server.js代码如下: var h ...