zoukankan      html  css  js  c++  java
  • 如何为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 >= 20
                              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 = 100;
                        product.Quantity = 20;
                        product.ProductName = "Orange";
    
                        product = new Products(uow);
                        product.Discontinued = true;
                        product.Price = 140;
                        product.Quantity = 50;
                        product.ProductName = "Apple";
    
                        product = new Products(uow);
                        product.Discontinued = false;
                        product.Price = 30;
                        product.Quantity = 120;
                        product.ProductName = "Banana";
    
                        product = new Products(uow);
                        product.Discontinued = true;
                        product.Price = 200;
                        product.Quantity = 80;
                        product.ProductName = "Grape";
    
                        product = new Products(uow);
                        product.Discontinued = false;
                        product.Price = 300;
                        product.Quantity = 10;
                        product.ProductName = "Garnet";
    
                        product = new Products(uow);
                        product.Discontinued = true;
                        product.Price = 120;
                        product.Quantity = 320;
                        product.ProductName = "Mandarin";
    
                        product = new Products(uow);
                        product.Discontinued = false;
                        product.Price = 250;
                        product.Quantity = 60;
                        product.ProductName = "Kiwi";
    
                        uow.CommitChanges();
                    }
                }
            }
        }
    }

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

  • 相关阅读:
    No.1
    JS二叉树的操作
    JS实现快排
    BOM中的各种height
    innerHTML outerHTML innerText value 区别
    【转载】JS中DOM操作汇总
    【转载】轻松理解JS闭包
    【转载】JavaScript模块入门
    【转载】JavaScript模块简介
    【转载】浏览器缓存详解:expires cache-control last-modified
  • 原文地址:https://www.cnblogs.com/foreachlife/p/6129973.html
Copyright © 2011-2022 走看看