[C#] Linq 動態條件查詢


應用背景:以貨品為例,在基礎數據中配置貨品的判斷規則,要根據這個規則篩選出符合條件的集合。

創建貨品類

    public class Product
    {
        public string Name { get; set; }
        public string Code { get; set; }
        public string Unit { get; set; }
    }

主要實現方法

        public void GetProducts()
        {
            #region 創建List 實際應用從數據庫中取值
            var products = new[] {
                new {Name = "貨品1", Code = "001", Unit = "個"},
                new {Name = "貨品2", Code = "002", Unit = "件"},
                new {Name = "貨品3", Code = "003", Unit = "瓶"},
                new {Name = "貨品4", Code = "004", Unit = "個"},
                new {Name = "貨品1", Code = "005", Unit = "台"},
            };
            List<Product> lsProducts = new List<Product>();
            foreach (var q in products)
            {
                Product product = new Product();
                product.Name = q.Name;
                product.Code = q.Code;
                product.Unit = q.Unit;
                lsProducts.Add(product);
            }
            #endregion
            //獲取到的判斷規則 判斷規則為Code和Unit 其中Name為固定條件
            string condition = "Code,Unit";
            string[] arrayCondition = condition.Split(',');
            //查詢結果
            List<Product> result = lsProducts.Where(a => Filter(a, arrayCondition, "貨品1", "005", "")).ToList(); //0條
            //只需判斷Code 其中Name為固定條件
            string condition2 = "Code";
            arrayCondition = condition2.Split(',');
            result = lsProducts.Where(a => Filter(a, arrayCondition, "貨品1", "005", "")).ToList();//1條
            //沒有判斷規則 其中Name為固定條件
            string condition3 = "";
            arrayCondition = condition3.Split(',');
            result = lsProducts.Where(a => Filter(a, arrayCondition, "貨品1", "005", "")).ToList();//2條
        }

        public bool Filter(Product product, string[] arrayCondition, string name, string code, string unti)
        {
            bool result = false;
            result = (product.Name == name)
                && (!arrayCondition.Contains("Code") ? true : product.Code == code)
                && (!arrayCondition.Contains("Unit") ? true : product.Unit == unti);
            return result;
        }

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM