由于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; }
浙公网安备 33010602011771号