2008-08-26 3 views
1

私は1つのテーブル "注文"とforeingキー "ProductID"を持っています。SQLへのLinq:結合テーブルの1つのフィールドだけを読み込めますか?

私はそれがやり過ぎのように縫い目すべて製品のフィールドを検索して、パフォーマンスを向上させるためLazyLoadせず、製品名でグリッドの注文を表示したいが、私の使用であればDataLoadOptions

検索方法はありますか最初のクエリの商品名のみですか? DBMLにいくつかの属性を設定できますか?

このうち、tableは、Linq To SQLでは「外部キー値」は「可視」ですが、これが何を意味するのかわかりません。

:タイトルが変更されました。解決策がないとは本当にわかりません。
誰も同じ問題を抱えているとは思えませんが、それは非常に一般的なシナリオです。

答えて

0

私は liammclennan答えに関係している。この他の質問Which .net ORM can deal with this scenario、溶液を得ますしかし明らかに(おそらく質問ももっと明白だったかもしれません)

0

linq問合せで必要な列のみを選択し、問合せで.ToList()をコールすると、即時に実行され、関心のある列のみが戻されます。あなたが結果に保存されている製品名のリストを取り戻すだろう、とクエリは、サーバー上で実行されるとき、それは唯一のProductName列を戻すことが

var q = from p in dataContext.products select p.ProductName; 
var results = q.ToList(); 

:これを行います。

+0

あなたは、すべてのレコードの名前を列挙したリストを検索することを意味しますか? –

+0

いいえ... 通常、linqを使って、 "var q = from c in db.Custs select c;"を実行すると、 qでforeachするまで、クエリは実行されません。また、すべての顧客フィールドがダウンします。 q.ToList()を実行すると、 "ToList"メソッドはqをforeachし、その結果をリストに挿入します。 –

+0

また、クエリのフィールドを変更すると、 "var q =(db.Custsのcからc.CustID、c.CustNameを選択).ToList();" データベースは次のようになります。 1)immedietly クエリを実行します。2)CustIDとCustNameの列のみを表示します。 –

5

あなたが求めているのは、linq-to-sqlが提供していない最適化のレベルです。私はあなたの最善の策は、おそらく匿名型として、あなたが望む正確にデータを返すクエリを作成することであると思う:

from order in DB.GetTable<Orders>() 
join product in DB.GetTable<Products>() 
on order.ProductID = product.ID 
select new { ID = order.ID, Name = order.Name, ProductName = product.Name }; 
+0

この匿名のすべてのタイプで生活するのは悪夢です。 –

+1

@Eduardo:逆に、匿名型のほうが実際にはもっと簡単になる場合もあります(特にこのような場合)。 – BenAlabaster

関連する問題