應用背景:以貨品為例,在基礎數據中配置貨品的判斷規則,要根據這個規則篩選出符合條件的集合。
創建貨品類
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;
}
