2012-11-07 7 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オブジェクト、より大きいとブラケット未満の間に1つは何ですか?私はそれに頭を打ちました。 LinqをSQLエンティティに使用しています。これを自分で試してみるとコンパイルエラーが発生します。

「にLINQのテーブルからキャストすることはできません...」

私は初心者です:私は、エラーのようなものがあると思います。明白なことがあるかもしれないことを尋ねてくれて、私を許してください。ありがとうございました。

+0

これら '<...>が'ジェネリック医薬品と呼ばれ、私は、LINQを使用する方法を知っているが、このことができますmabyません。http://msdn.microsoft.com/en-us/library/bb546142.aspx –

答えて

2

コメント欄に@MatsRietdijkと記載されているので、これはジェネリックが使用されています。基本的に、ジェネリックでは、型/クラス(この例では「従業員」)で動作するメソッドを作成することができます(これはwhere statementで制御できます)。あなたには、いくつかの他のタイプ(例えばcustomer)についてemployeeタイプを変更した場合

は、その後、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にリンクしてくれてありがとう。再度、感謝します。 –

関連する問題