如何为CriteriaOperator过滤对象转换为lambda表达式,即:linq to xpo的动态where语句
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语句的更多相关文章
- C# Lambda表达式和linq表达式 之 匿名对象查询接收
很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴 对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行 条件筛选呢?常规用法我就不说 ...
- C#从委托、lambda表达式到linq总结
前言 本文总结学习C#必须知道的基础知识,委托.监视者模式.常用lambda表达式.linq查询,自定义扩展方法,他们之间有什么关系呢?匿名委托是如何演变成lambda表达式,lambda再如何导出l ...
- entity framework 新手入门篇(1.5)-lambda表达式与linq
在建立好了EF模型之后,先不着急使用它,在使用它之前,你还需要了解两个相关的技术,lambda表达式与linq. 作为微软C#语言中重要的语法糖-lambda表达式与LINQ,本质都是一个方法,以la ...
- c# in deep 之Lambda表达式于LINQ表达式结合后令人惊叹的简洁(2)
当Lambda表达式和LINQ一起使用时,我们会发现原本冗长的代码会变得如此简单.比如我们要打印0-10之间的奇数,让其从高到低排列并求其平方根,现在只用一行代码即可完成其集合的生成,直接上代码: v ...
- C# 匿名委托、匿名方法、匿名对象、Lambda表达式
一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello&quo ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- C++ 理解函数对象与lambda表达式
参考<21天学通C++>第21与第22章节,对函数对象进行介绍,同时通过lambda表达式这一匿名函数对象的简洁方式加深对函数对象的理解.本篇博文的主要内容是: (1) 函数对象的概念: ...
- C# 基础知识系列- 6 Lambda表达式和Linq简单介绍
前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...
- .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)
1.自动属性 Auto-Implemented Properties 2.隐式类型 var var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...
随机推荐
- [Android Tips] 23. How to fail/stop Gradle task immediately if some conditions are not met
throw new GradleException("conditions are not met") 参考 How to fail/stop task immediately i ...
- JSSDK用法//////////////////zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
参照微信官方文档,调试成功之后总结如下: 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 步骤二: ...
- windows批处理的介绍
扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件. 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命 ...
- JQuery selector - not
<div class="table"> <div class="row header"></div> <div cla ...
- sql查询指定表外键约束
//////////////////查询指定表外键约束select a.name as 约束名, object_name(b.parent_object_id) as 外键表, d.name as 外 ...
- linux-bash shell学习
什么是shell?shell就相当于是计算机给我提供的一个操作系统的接口,这里说的bash shell是一种命令行方面的软件,提供给用户来操作系统.
- [转]LocalDB数据库修改排序规则,修复汉字变问号
VS中新增的轻量级数据库LocalDB,有个这个,开发人员就不必再安装庞大的SQL server了,可以方便地测试运行小型项目:既然是轻量级数据库,它抛弃了庞大的身躯,功能上当然也会受到局限,其中之一 ...
- webpack模块依赖管理介绍
http://webpack.github.io/docs/ webpack is a module bundler. 是一个模块管理器 webpack可以管理模块的依赖关系,并产生可以替代这些模块的 ...
- Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器
(八)传入的数据绑定 先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么 ①obj的值的变化,将影响Vue实例中的值的变化: ②相反一样: ③可以在Vue实例外面操纵 ...
- How to convert webp to png/jpg/gif in MacOS
Environment I'm using OS X 10.11.4 and have homebrew 1.0.5 installed. Introduction I recently downlo ...