2009-01-19 18 views
5

LoadWith'i kullanmanın bir yolu var mı, ancak döndürülen alanları mı belirtiyorsunuz? Örneğinlinq to sql LoadYeni sınırlayıcı alanlar döndü

, ben iki tablo 1) Ürünler 2) Kategoriler

var ve bakın ben profilcisine sorguyu kontrol ederken

DataLoadOptions dlo = new DataLoadOptions(); 
dlo.LoadWith<Products>(d => d.Categories); 
db.LoadOptions = dlo; 

MyDataContext db = new MyDataContext(); 
var result = from d in db.Products 
      select d; 

gibi bir şey yaparsanız o Kategoriler tablosundan TÜM satırlar iade ediliyor. Tek ihtiyacım olan şey "İsim" alanı.

Sorguları birleştirme kullanarak yeniden yazabilirim, ancak sonuç kümesini "Ürün" veri türü olarak geri göndermem gerekiyor, bu yüzden LoadWith kullanıyorum.

cevap

1

Hayır, LoadWith ile bu mümkün değil.

Projeksiyonda iç içe geçmiş bir sorgu ile deneyebilirsiniz, ancak bu yavaş olacaktır: Her bir ebeveyn için 1 sorgu (bu nedenle, her ürün için ilişkili kategori için 1 sorgu).

0

Bir projeksiyon kullanabilirsiniz, ancak bu

select new {Order = order, ProductName = order.Product.Name, 
      CustomerName = order.Customer.Name, 
      OrderType = order.OrderType.Name } // etc 
sonra anynomus türleri ile uğraşmak gerekir