GridViewに表示するLinq-to SQLクエリを取得する
-
02-07-2019 - |
質問
非常に複雑なLinqクエリがあり、GridViewで使用するためにLinqDataSsourceにアクセスできないようです:
IEnumerable<ticket> tikPart = (
from p in db.comments where
p.submitter == me.id &&
p.ticket.closed == DateTime.Parse("1/1/2001") &&
p.ticket.originating_group != me.sub_unit
select p.ticket
).Distinct();
これをGridViewに組み込むにはどうすればよいですか?ありがとう!
解決
データソースなしでGridviewをセットアップできます。 gridview列を設定し、コードビハインドでその結果をグリッドビューにバインドします。
他のヒント
gridview.DataSource = tikPart.ToList();
gridview.DataBind();
@leppie-データソースとしてアタッチするときに、IQueryableでToList()を呼び出す必要はありません。
DataBindメソッドがToListと呼ばれる前にDataContextが破棄されていない場合、冗長な呼び出しになります。
デフォルトでは、DataContextは遅延読み込みを使用するため、IQueryableが列挙されている場合にのみデータベースからデータがフェッチされます。 ToList()は列挙を実行して呼び出しを行うため、DataBind()も行います。
したがって、次のようなことができます:
using(MyDataContext ctx = new MyDataContext(){
this.MyGridView.DataSource = from something in ctx.Somethings where something.SomeProperty == someValue select something;
this.MyGridView.DataBind();
}
DataContextを破棄する方法によって、データソースにバインドするものが決まります。
GridViewで自動生成された列を使用して、返されたオブジェクトのすべてのプロパティを列に変換するか、デザイナーで列を記述してバインドルールを設定できます。
IQueryable <!> lt; <!> gt;をバインドできます。 LinqDataSourceコントロールを使用してGridViewに入力します。 http://johnsobrepena.blogspot.com/2010/ 01 / data-bind-coolgridview-to-iqueryable.html