陋室铭
永远也不要停下学习的脚步(大道至简至易)

由于Linq查询主要是强类型查询,所以很难做到像sql语句一样,在执行前可以动态拼接。

不过通过方法或者集合方式也可以实现一定的动态化。

1.字段的动态拼接:其实就是对一个数据集多次检索。

        List<Custom_Organization> Default = GetDefault();
        List<Custom_Organization> COs = Default;
        #region 搜索
        string OrganizationName = TextBoxOrganizationName.Text.Trim();
        string ParentID = TextBoxParentID.Text.Trim();
        string CountryName = TextBoxCountryName.Text.Trim();
        string RegionName = TextBoxRegionName.Text.Trim();

        #region 机构名称
        if (OrganizationName != "")
        {
            if (CheckBoxOrganizationName.Checked)
            {
                var result = from o in COs
                             where o.OrganizationName.ToLower() == OrganizationName.ToLower()
                             select o;
                if (result.Count() > 0)
                {
                    COs = result.ToList();
                }
            }
            else
            {
                var result = from o in COs
                             where o.OrganizationName.Contains(OrganizationName)
                             select o;
                if (result.Count() > 0)
                {
                    COs = result.ToList();
                }
            }
        }
        #endregion

        #region 国家,地区
        {
            var result = from o in COs
                         where o.CountryName.Contains(CountryName) && o.RegionName.Contains(RegionName)
                         select o;
            if (result.Count() > 0)
            {
                COs = result.ToList();
            }
        }
        #endregion

        #region 机构类型
        List<string> list1 = GetCustom_OrganizationTypes();
        if (list1.Count > 0)
        {
            var result = from o in COs
                         where list1.Contains(o.OrganizationID)
                         select o;
            if (result.Count() > 0)
            {
                COs = result.ToList();
            }
        }
        #endregion

        #region 父机构(包括自己)
        List<string> list2 = GetParentIDs();
        if (list2.Count > 0)
        {
            var result = from o in COs
                         where list2.Contains(o.ParentID)|| list2.Contains(o.OrganizationID)
                         select o;
            if (result.Count() > 0)
            {
                COs = result.ToList();
            }
        }
        #endregion

        #region 排序
        string Order = DropDownListOrder.SelectedValue;
        if (Order == "2")
        {
            var result = from o in COs
                         orderby o.Count descending
                         select o;
            if (result.Count() > 0)
            {
                COs = result.ToList();
            }
        }
        #endregion


        #endregion

 

 

2.动态的or操作。可以简单的使用list创建搜索集合。

        #region 搜索
        List<string> list = new List<string>();
        list.Add("str1");
        list.Add("str2");
        list.Add("str3");
        var v = from A in Models
                from B in list
                where A.数据.Contains(B)
                select A;
        #endregion

或者

        #region 搜索
        List<string> list = new List<string>();
        list.Add("str1");
        list.Add("str2");
        list.Add("str3");
        var result = from o in Models
                     where
                     list.All(s => o.数据.Contains(s))
        #endregion

 

3.动态的and操作。可以简单的使用list创建搜索集合。

当然不写方法直接循环执行也可以。

        #region 搜索
        List<string> list = new List<string>();
        list.Add("str1");
        list.Add("str2");
        list.Add("str3");

        List<string> Models = new List<string>();
        foreach (string l in list)
        {
            Models = GetSearch(Models, l);
        }
        #endregion

    List<string> GetSearch(List<string> ss, string str)
    {
        var v = from A in ss
                where A == str
                select A;
        List<string> Models = v.ToList();
        return Models;
    }

 

posted on 2023-02-23 18:52  宏宇  阅读(917)  评论(0编辑  收藏  举报