私はLINQを初めて使用するので、コーディングについて本当に助けが必要です。
現時点では、文字列と変数変数があります。
string temp = "from product in myEntities.Products where product.Name.Contains(_Name) select product";
var _Products = temp;
LvProducts.DataSource = _Products;
LvProducts.DataBind();
基本的に、私がやりたいのは、事前に文字列に割り当てることで、カスタム/複雑なLINQクエリを作成できるようにすることです。作成が完了したら、文字列をvar変数に割り当てます。ただし、これは明らかに機能しません。したがって、誰かがこれについて私を助けることができますか?
いくつかのオプションがあります。
Dynamic Linq ライブラリを使用して、その場でクエリを作成します。始めるのに最適な場所は、 ScottGuのブログエントリ を読むことです。ただし、これらのライブラリは、例のcontainsメソッドをサポートしていないと思います。 ここ は、このサポートを追加する方法を説明するブログ投稿です。
直接SQLステートメントを実行します。 Linq to Sql または Linq to Entities のMSDNドキュメントを確認してください。
var _Products = myEntities.ExecuteStoreQuery<Product>
(@"SELECT * FROM Products WHERE [Name] In ('Item1', 'Item2')");
Linqの構成可能な動作を使用します。これは最も洗練されたソリューションではないかもしれませんが、選択肢が多すぎない場合は非常にうまく機能します。複数の部分でクエリを作成できます。
var _Products = from product in myEntities.Products
select product
_Products = from product in _Products
where product.Name.Contains(_Name)
select product
if FilterByPrice {
_Products = from product in _Products
where product.Price > 100
select product
}
CodeDomProviderを使用していくつかのc#内でこのLinqをコンパイルすることでこれを行うことができます- 。NETアプリケーションにスクリプト機能を追加する -しかし、これは解決策としてかなり重いです。これを行う方法について詳しく知りたい場合は、LinqPadをご覧ください http://www.linqpad.net -作者は、逆コンパイラーを使用して、それがどのように機能するかを確認することを勧めています。
要件が単純なwhere句にすぎない場合は、Dynamic Linqを使用することもできます-ScottGuの投稿とMicrosoftのサンプルコードを参照してください--- http://weblogs.asp.net/scottgu/archive/2008 /01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
多分これはあなたを助けることができます http://nlinq.codeplex.com/
BR。
そもそもLINQを使用する理由の多くは、コンパイル時にエラーを検出するコンパイラ検証済みクエリを取得するためです。文字列は実行時に解析されるため、これはその目的を無効にします。
ニーズに応じて、2つのオプションがあります。
1)eSQLクエリを作成し、それをObjectContextで実行します。これを使用すると、myEntities.Productsなどのエンティティを引き続き使用して、製品のリストを返すことができます。
2)通常のSQLクエリを使用し、ObjectContextを使用して、基になるデータベースに直接呼び出します。
私の推測では、動的なコード実行を使用する必要があります。詳細については、Ricksの投稿 west-wind をご覧ください。