یکی از راههای توصیه شده برای افزایش Performance در Queryهای دیتابیس، پرهیز از استفادههای بیمورد از select * from some_table میباشد. راه حل توصیه شده استفاده از projection و برگرداندن صرفاً ستونهای مورد نیاز از دیتابیس است. مثلاً باید از select col1, col2 from some_table استفاده شود.
در همین راستا LINQ-to-NHibernate هم پشتیبانی خوبی از اپراتورهای Projection در LINQ دارد. به نمونه زیر توجه کنید:
var query = from
entity in ActiveRecordLinq.AsQueryable()
where
entity.Prop1 == "123"
select
new SomeEntityDTO(Prop1, Prop2);
Listlist = query.ToList ();
اسکریپت SQL تولید شده از query بالا فقط شامل Prop1 و Prop2 خواهد بود. توجه شود query بالا با استفاده Castle ActiveRecord نوشته شده ولی با LINQ-to-NHibernate اصلی هیچ فرقی ندارد.
دیدگاهها
يك نكته رو بايد اينجا اضافه كرد و اون هم اين است كه هنگام استفاده از لينك، كوئري نهايي تحت هر شرايطي به سلكت هر چي ترجمه نميشود. اگر از پروجكشن استفاده نشود تمام فيلدها در كنار هم رديف خواهند شد و اين از لحاظ كارآيي متفاوت است با سلكت هر چي و بهتر است در كل