Entity Framework Join İşlemi (C#)
-
Yeni yeni entity framework'u öğreniyorum, yapmak istediğim bir şey var, nasıl yapıldığını tam çözemedim.
Sıfırdan entity data model oluşturdum, tablolarımı ve ilişkilerini ayarlarım. Yaptığım projede iki tablodan bazı bilgiler alıp tek bir tabloymuş gibi göstermek istiyorum ama kodla değilde entity data model de direk görsel olarak oluşturduğum yerde bunu yapmam mümkün mü? Mapping'den ikinci tablomu ekleyip validet dediğimde hata alıyorum.
-
Bunun için ayrı bir sınıf tanımlayıp, .Select(new YeniObje { x=c.a, y = b.a} ) diye oluşturman gerekiyor
-
arkadaşın dediği gibi yeni bir sınıf ile yapabilirsin. işin güzel özelliği bu :) mesela birden fazla sınıfı/tablo yu birleştirdin, buradan istediklerini
döndermek için "istediklerin" için bir sınıf yazıyorsun ve propertylerine bu değerleri atıyorsun :) bu da çok büyük bir esneklik sağlıyor :)
-
Ercan bunu yazdı
Yeni yeni entity framework'u öğreniyorum, yapmak istediğim bir şey var, nasıl yapıldığını tam çözemedim.
Sıfırdan entity data model oluşturdum, tablolarımı ve ilişkilerini ayarlarım. Yaptığım projede iki tablodan bazı bilgiler alıp tek bir tabloymuş gibi göstermek istiyorum ama kodla değilde entity data model de direk görsel olarak oluşturduğum yerde bunu yapmam mümkün mü? Mapping'den ikinci tablomu ekleyip validet dediğimde hata alıyorum.
View yazıp onu map edebilirsin, oldukça basit olur.
Eğer viewa bağlı olcak tablolar çok seyrek insert alıyorsa, indexed view'e çevirebilsin, daha performanslı olur.
Nası oluşturulcağı hakkında buraya bakabilirsin.
http://msdn.microsoft.com/en-us/library/ms187956.aspx
EF de db first gittiğini varsayarsak, karşına çıkan sihirbazda View'e tik atman o view'i select işlemlerinde kullanman için yeterli olucaktır.
nessaj tarafından 22/Ara/12 01:41 tarihinde düzenlenmiştir -
Hocam yaparsın bi şekilde de doğru yolu o değil.
SPler oluştur öyle karmaşık işlemler için ve SP lerin sonuçlarını çek entity üzerinden
-
join işlemi için .join metodu var.
-
Pek fazla zamanım olmadı dediklerinizi yapmak için, sp ile nasıl çekilir onu henüz öğrenmedim. İllk fırsaatta bakıcam belki de en son onunla hallederim. Birde yeni nesne oluşturmadan olayı tablo'da halletmek istememin sebebi dinamik sorgu oluşturmak istemem. PredicateBuilder diye birşeye rasladım. Kullanışlı birşey çoğu yerde kullandım database.tabloadi.where(nesnem) şeklinde kullanınca çalışıyor ama join'i kullanıp nesne yaratmak istediğimde hata veriyor.
- using (SPModelContainer db = new SPModelContainer())
- {
- var predicate = PredicateBuilder.True();
- predicate = predicate.And(x => x.OrderDate >= dtDate1.Value && x.OrderDate <= dtDate2.Value);
- if (!string.IsNullOrEmpty(txtCustomer.Text))
- predicate = predicate.And(x => x.Customer.Equals(txtCustomer.Text));
- if (!string.IsNullOrEmpty(cbProduct.Text))
- predicate = predicate.And(x => x.Product.Equals(txtCustomer.Text));
- var query = (from o in db.Orders.Where(predicate)
- join d in db.Dealers on o.DealerOrderId equals d.DealerId
- select new { o.OrderId, o.DealerOrderId, o.OrderDate, o.Durum, d.DealerName, o.Customer, o.Phone, o.City, o.Districk, o.Address, o.Cost, o.Product, o.PaymentType, o.Explanetion });
- dgOrders.DataSource = query;
- }
The LINQ expression node type 'Invoke' is not supported in LINQ to Entities. (Bu hatayı kod çalıştğımda alıyorum)
tek bir tablodan veri çekerken problem çıkartmıyor.
http://www.codeproject.com/Articles/231706/Dynamic-query-with-Linq
-
select new yaptığın yerde dynamic value döndürmek yerine kendi yazdığın bir classı kullan ve predicatebuilderın generic parametresinede o classı ver.