none
Entityde Değeri alıyorum ama hata fırlatıyor RRS feed

  • Soru

  • Entity de sadece bir kolonun bilgisini alıyorum ve bunu başka bir sorguda kullanmak istiyorum. ancak bu sistem hata fırlatıyor. kod şu şekilde,

     var resultcustomerid = crm.Projects.Where(b => b.DepartmentID == result.Single().DepartmenID).ToList();

    Burada yapmak istediğim result sorusundan dönen DepartmenID ye göre CustomerID leri alıp bir liste döndürmek. 

    Burda sorguda hata çıkarıyor. Bunu nasıl yapabilirim?


    ozdemiryazilim

    30 Ocak 2013 Çarşamba 15:35

Yanıtlar

  • Normal şartlar altında aşağıdaki sorgunuz liste döndüreceği için List fonksiyonunu kullanmanıza gerek yok.

     var resultcustomerid = crm.Projects.Where(b => b.DepartmentID == result.Single().DepartmenID);

    resultcustomerid  nesnesini foreach ile listeleyebilirsiniz.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    • Yanıt Olarak İşaretleyen pcci 1 Şubat 2013 Cuma 08:20
    31 Ocak 2013 Perşembe 11:42

Tüm Yanıtlar

  • ne hatası veriyor. Ayrıca CustomerId hangi listenin altında bulunuyor. Projects içerisinde onlar var mı.

    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    30 Ocak 2013 Çarşamba 16:28
  • SingleOrDefault() ile tek kaydı alın.Aslında bu satır hata üretmemesi lazım. Problem varsa result u alırken vardır. Şöyle deneyin;

    var resultcustomerid = crm.Projects.Where(b => b.DepartmentID == result.SingleOrDefault().DepartmenID).ToList();


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC



    30 Ocak 2013 Çarşamba 17:50
    Moderatör
  • hata olarak şunu veriyor :

    'Single' ve 'SingleOrDefault' yöntemleri yalnızca son sorgu işleminde kullanılabilir. Bu örnekte bunun yerine 'FirstOrDefault' yöntemini kullanmayı deneyin.


    ozdemiryazilim

    31 Ocak 2013 Perşembe 08:40
  • Normal şartlar altında aşağıdaki sorgunuz liste döndüreceği için List fonksiyonunu kullanmanıza gerek yok.

     var resultcustomerid = crm.Projects.Where(b => b.DepartmentID == result.Single().DepartmenID);

    resultcustomerid  nesnesini foreach ile listeleyebilirsiniz.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    • Yanıt Olarak İşaretleyen pcci 1 Şubat 2013 Cuma 08:20
    31 Ocak 2013 Perşembe 11:42
  • normal şartlar altında malesef çalışmıyor :)

    var resultdeparmant = crm.Personnels.Where(a => a.PersonnelID == personnelid).Select(t => new { t.DepartmenID });
    var resultcustomerid = crm.Projects.Where(b => b.DepartmentID == resultdeparmant.SingleOrDefault().DepartmenID);
             
    foreach (var item2 in resultcustomerid)
    {
    
    }
    Bu şekilde yazdım ama aynı hatayı fırlatıyor?


    ozdemiryazilim


    • Düzenleyen pcci 31 Ocak 2013 Perşembe 14:50
    31 Ocak 2013 Perşembe 14:49
  • SingleOrDefault() tek kayıt olduğundan emin olduğunuz sorgulamalar için kullanırsınız. Mesela Identity olarak atanmış Id alanlarını sorgularken

    crm.Personnels.SingleOrDefaults(p=>p.PersonelId==personelid)

     Yazdığınız sorguda birden fazla kayıt dönüyorsa exception alırsınız ki sizin yazdığınız sorguda birden fazla kayıt dönüyor.

    Yapmak istediğiniz şey tam olarak nedir. Departman Id'lerine göre projeler içerisinde foreach ile dönmekmi ? Yoksa belirli bir Departman Id'sine göre filtrelenen projeler içerisinde dönmekmi ?


    PersonelId'yi Identity veya unique olarak kabul edersek. Sanırım aşağıdaki kod işinizi görecektir.

    var personel=crm.Personnels.SingleOrDefaults(p=>p.PersonelId==personelid)

    var projeler = crm.Projects.Where(b => b.DepartmentID == personel.DepartmenID);
             
    foreach (var proje in projeler)
    {

    }



    31 Ocak 2013 Perşembe 15:25
  • yapmak istediğim şu : 

    Personeller tablosundaki projeid lerinin departmanid lerini alıcam. Ardından bu derpartmanid lere göre customerid leri bulucam. Customerid bir fazla değer geliyor. Yani liste şeklinde gelicek ki ben bunu kullanabileyim. Hepsi bu işte.


    ozdemiryazilim

    31 Ocak 2013 Perşembe 15:39
  • İç içe iki foreach döngüsü yapman lazım

    foreach (var personel in crm.Personnels) {

    var projeler = crm.Projects.Where(b => b.DepartmentID == personel.DepartmenID);

    foreach (var proje in projeler) { } }



    31 Ocak 2013 Perşembe 21:17