2012-11-07 188 views
6

我需要知道如何使用PredicateBuilder。在如何使用它幾乎每一個例子,它們顯示的代碼如下:使用PredicateBuilder需要幫助

var predicate = PredicateBuilder.True<employee>(); 

if (!string.IsNullOrEmpty(txtAddress.Text)) 
    predicate = predicate.And(e1 => e1.Address.Contains(txtAddress.Text)); 
if (!string.IsNullOrEmpty(txtEmpId.Text)) 
    predicate = predicate.And(e1 => e1.Id == Convert.ToInt32(txtEmpId.Text)); 
if (!string.IsNullOrEmpty(txtDesc.Text)) 
    predicate = predicate.And(e1 => e1.Desc.Contains(txtDesc.Text)); 
if (!string.IsNullOrEmpty(txtName.Text)) 
    predicate = predicate.And(e1 => e1.Name.Contains(txtName.Text)); 

EmployeeDataContext edb= new EmployeeDataContext(); 
var emp = edb.Employees.Where(predicate); 
grdEmployee.DataSource = emp.ToList(); 
grdEmployee.DataBind(); 

那是什麼Employee對象,一間大於和小於括號?我已經絞盡腦汁。我正在使用Linq到SQL實體,當我自己嘗試這個時會出現編譯錯誤。我認爲錯誤是這樣的:

「不能從一個LINQ錶轉換爲...」

我是一個初學者。請原諒我問什麼可能是一件顯而易見的事情。謝謝。

+0

那些''<...>被稱爲仿製藥,我不知道如何使用LINQ,但莫比這有助於:http://msdn.microsoft.com/en-us/library/bb546142.aspx –

回答

2

正如@MatsRietdijk在評論部分所述,這是使用的泛型。基本上,對於泛型,您可以創建一個方法,該方法將在未知的類型/類(本例中爲「員工」)上進行操作(儘管您可以使用where statement來控制此類)。

如果你改變employee類型爲其他類型(例如customer),然後在lambda expressions提供的屬性也將是不同的,基於什麼性質,公開曝光。例如:

var predicate = PredicateBuilder.True<customer>(); 

// There is no "CustomerName" property from employee, but there is for customer objects 
if (!string.IsNullOrEmpty(txtName.Text)) 
    predicate = predicate.And(e1 => e1.CustomerName.Contains(txtName.Text)); 
+0

謝謝你的回答。我忘了那一點。我會試試看。此外,感謝您的鏈接MatsReitdijk。再次感謝。 –