2009-03-21 2 views
2

戻ってくる子要素の数を制限したいと思います。この例では、Order.CustomerID "VINET"に3つのOrder Detailsがあります。私は単価14のレコードを見たいだけです。単価が9.8または43.8のOrder Detailsを表示したくないです。グリッドにデータバインドされたときにLINQサブクエリを制限する

最後に、私は動的なクエリまたは述語で、しかし簡単な例は私の問題を示すはずです。私はこれを、以下に示す2つの方法を含めていくつかの方法で試しました。 LINQが展開するときにLINQが自動的に独自のクエリを実行しているという問題に気付いていますが、誰かが良い解決策を持っていますか?

private void btnJoinProblem_Click(object sender, EventArgs e) 
{ 
NorthwindDataContext db = new NorthwindDataContext(); 
var tempQ2 = (from od in db.Order_Details 
join o in db.Orders on od.OrderID equals o.OrderID 
where od.UnitPrice == 14 
select o).Distinct(); 
} 

はまた、注文の詳細レベル

NorthwindDataContext db = new NorthwindDataContext(); 
var tempQ = from o in db.Orders 
      where o.Order_Details.Any(od => od.UnitPrice == 14) 
      select o; 

var bindingSource = new BindingSource(); 
bindingSource.DataSource = tempQ; 
ultraGrid1.DataSource = bindingSource; 

答えて

1

まず、匿名型(または名前付き型)にする列を「選択」することです。これは、長方形のデータを取得していることを意味します。怠惰な読み込みについて次に、グリッドのリストが必要です。

のようなものを試してみてください:

using(NorthwindDataContext db = new NorthwindDataContext()) { 
    var query= from od in db.Order_Details 
       join o in db.Orders on od.OrderID equals o.OrderID 
       where od.UnitPrice == 14 
       select new {o.OrderId, o.Customer.CustomerName, 
          od.UnitPrice}; // etc 

    ultraGrid1.DataSource = query.Distinct().ToList(); 
} 
+0

BindingSource.DataSourceは、およそ10種類の異なる型を受け入れます。 IEnumberableはその1つです。追加/削除機能を使用する場合にのみリストが必要です。 :) – leppie

+0

十分な公正 - 明示的な投影についての私のポイントは... –

+0

ありがとう。私は自分のカスタムオブジェクトを構築する必要があります。なぜなら、遅延ロードが問題を引き起こしているからです。 – joe

1

に戻ってあまりにも多くのサブレコードをもたらしますBindingSourceに結合し、あなたのクエリにAsDataView()を使用してみてください、それが動作するかどうかを確認、次のように:

var bindingSource = new BindingSource(); 
bindingSource.DataSource = tempQ.AsDataView(); 

もちろん、グリッドのデータソースをBindingSourceに設定することを忘れないでください。

速記:AsDataView()は、参加があれば使用できません。 IIRC、しかし次べき仕事:あなたはおそらく親子関係のo.Order_Details、ないdb.Order_Detailsを使用したい

var tempQ = from o in db.Orders 
      where o.Order_Details.Any(od => od.UnitPrice == 14) 
      select o; 

注、(それはあなたのデータセットに正しく設定されていますと仮定した場合)。

+0

私はこれらのエラーに インスタンスの引数を取得: たSystem.Data.DataTable& にSystem.Linq.IQueryable を変換することはできませんと、「AsDataView」との定義が含まれていません。最高の拡張メソッドオーバーロード 'System.Data.DataTableExtensions.AsDataView(System.Data.DataTable)'に無効な引数がいくつかあります – joe

+0

PS私はSystem.Data.DataSetExtensions.dllにrefを追加しました。私は迅速な答えに感謝しています。 – joe

+0

どのクエリを使用していますか? –

関連する問題