2012-11-07 19 views
6

'u kullanırken yardıma ihtiyacım var PredicateBuilder'u kullanmayla ilgili bilmem gerekenler.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(); 

ne olduğunu Employee nesne arasındaki bir parantez daha az ve daha büyük: nasıl kullanılacağını hemen her örnekte, onlar şöyle kodu gösterin? Beynime bu konuda saldırdım. Linq to SQL varlıkları kullanıyorum ve bunu kendim denediğimde derleme hataları alıyorum.

"Bir Linq tablodan döküm Can not ..."

Ben bir acemi: Ben hatalar gibi bir şey olduğunu düşünüyorum. Açık bir şeyin ne olabileceğini sorduğum için lütfen beni affedin. Teşekkür ederim.

+0

olanlar '<...>' Generics'i denir, ben linq nasıl kullanılacağını biliyor ama maby yok bu yardımcı olur: http://msdn.microsoft.com/en-us/library/bb546142.aspx –

cevap

2

@MatsRietdijk yorum bölümünde belirtildiği gibi, bu kullanılan jeneriklerdir. Temel olarak, jeneriklerle bir tür/sınıf (bu örnekte "çalışan") üzerinde çalışacak bir yöntem yaratamazsınız (bu, where statement ile kontrol edebilirsiniz). Eğer başka bir türü (örn customer) için employee türünü değiştirmek için olsaydı

ardından lambda expressions mevcut özellikler aynı zamanda herkese maruz bırakıldı neyse özellikleri dayanarak farklı olurdu. Örneğin:

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

Cevabınız için teşekkür ederiz. Bu noktayı unuttum. Deneyeceğim. Ayrıca, bağlantı için teşekkürler MatsReitdijk. Tekrar teşekkürler. –