2016-04-11 29 views
1

Bu benim sınıftır:Nasıl yapılır? Nesne başvurusu, FirstOrDefault ile nesne hatası örneğine ayarlanmadı mı?

public class Employee 
{ 
    public int EmployeeId { get; set; } 
    public int Skillssetpoints { get; set; } 
    public string Name { get; set; } 
    public string EmployeeCode { get; set; } 
    public Nullable<System.DateTime> Date { get; set; } 
} 

Kodu:

Senaryo 1:

Emp01 sonra elde hata nesne referansı ayarlanmamış ile bulunan eşleşme varsa İşte
var data=context.Employee.ToList(); //Get all employee records. 

//Filter records by employee code(Emp01) and fetch single employee code.for eg:Emp01 

var empCode = data.FirstOrDefault(t =>(t.EmployeeCode.Trim() == Model.EmployeeCode.Trim())).EmployeeCode; 

nesne örneğine ancak , aşağıdaki kodla düzeltildi:

var Single = data.FirstOrDefault(t =>(t.EmployeeCode.Trim() == Model.EmployeeCode.Trim())); 

if(single!=null) 
{ 
    var data=Single.EmployeeCode; 
    //Rest other code. 
} 

Senaryo 2:

Hata: nesne başvurusu bir nesnenin örneğine ayarlanmadı verilerim nesnesinde İşte

var data=context.Employee.ToList(); //Get all employee records. 

//Fetch List of employee with Employee code:Emp01 

var list= data.FirstOrDefault(t =>(t.EmployeeCode.Trim() == Model.EmployeeCode.Trim())); 

herhangi EmployeeCodenull ise o zaman ben bu hatayı alıyorum

Bununla düzeltildi:

i herhangi boş çalışanın kodu wihtout tüm çalışanların kayıtları başlamıştı çünkübenim ikinci senaryosu için
var list= data.FirstOrDefault(t => (t.EmployeeCode != null) && (t.EmployeeCode.Trim() == Model.EmployeeCode.Trim())); 

i çalışanın tüm kayıtları getirilirken ve Çalışan koduna göre filtre yapıyordu ben ilk başta bu boş durumu addedd sığınak ve her şey iyi çalışıyordu Ancak herhangi bir noktada çalışan kodu geçersiz hale geldi ve bu hatayı aldım. Bu hatalardan kaçınmak istiyorum.

Sadece bu senaryoyu ele almanın daha iyi bir yolu olduğunu bilmek isterim ???

var employees = context.Employee.ToList(); 
var data = employees.Where(t => t.EmployeeCode.Trim() == Model.EmployeeCode.Trim()) 
        .Select(t => t.EmployeeCode) 
        .FirstOrDefault(); 

if(data != null) 
{ 
    //Rest other code. 
} 

senaryo 2 için nerede boş değerlere filtrelemek için fazladan ekleyebilirsiniz:

+0

kesin soru/sorun nedir? Sorunu kendi başına çözdün. Ne istediğini anlamadım. – BendEg

+0

@BendEg: ama ne yaptığımı bununla başa çıkmak için daha iyi bir yol istiyorum çünkü 2. senaryona bakarsanız bu hatayla karşılaştıktan sonra bu null koşulunu ekledim. İkinci senaryodan sonra daha önce de çalışan kodunun null olmadığı her çalışanın kayıtlarını almıyordu, bu yüzden her şey iyi çalışıyordu ama bundan sonra herhangi bir kayıtta çalışan kodum geçersiz hale geliyordu, sonra bu hatayı alıyordum ve bundan sonra bunun için null koşulu ekledim. Bu –

+1

işlemek için daha iyi bir yol isteyebilirsiniz Muhtemelen, yalnızca bir tane istediğinizde tüm kayıtları belleğe yüklemek için '.ToList()' i kullanmak için bir atık. –

cevap

2

senaryo 1 için, böyle bir şey yazabilirsiniz. Ancak bunu dilim şekilde, ihtiyaç kontrol etmek, ancak bölme yukarı filtreleme, en azından bana göre, daha güzel:

var list= data 
      .Where(d => d != null) 
      .FirstOrDefault(t => t.EmployeeCode.Trim() == Model.EmployeeCode.Trim()); 
+0

İkinci senaryo için, çalışan kodu hakkında bilgi sahibi değilseniz, bu kodu yazarken bir noktada boş olabilirsiniz. Tamam çalışan kodunun bir noktada boş olabileceğini bilerek boş süzgeç kullanmayı düşünebilirsiniz. –

+0

Kodu yazan kişi *, çalışan kodunun null olabileceğini bilmelidir. NULL çekmeden kaçınmanın bir yolu yok, kodun bir noktasında bunu yapmanız gerekecek. – Rob

+1

'context.Employee.ToList();' çok yanlış. Bu, tüm çalışan masasını döndürecek. –

1
var employees = context.Employee.ToList(); 
var result = employees.Where(t => (t.EmployeeCode ?? "").Trim() == (Model.EmployeeCode ?? "").Trim()) 
        .Select(t => t.EmployeeCode).FirstOrDefault();