6

の使用について知る必要があり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 to SQLエンティティを使用していますが、これを自分で試すとコンパイルエラーが発生します。エラーは次のようなものだと思います。

「Linqテーブルから...にキャストできません。」

私は初心者です。当たり前のことを聞いてくれて許してください。ありがとうございました。

4

1 に答える 1

2

@MatsRietdijk がコメント セクションで述べたように、これはジェネリックが使用されています。基本的に、ジェネリックを使用すると、未知の型/クラス (この場合は「従業員」) で動作するメソッドを作成できます (whereステートメントでこれを制御できます)。

employee他の型 ( などcustomer)の型を変更する場合、公開されているプロパティに基づいて、ラムダ式で使用できるプロパティも異なります。例えば:

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));
于 2012-11-07T04:07:09.817 に答える