1

たとえば、文字列SQLクエリを使用してC#リストをデータベースとしてクエリする方法を見つけようとしていました:

List<Customer> customers = new List<Customer>(){
    new Customer(){Name = "joe", Age = 20},
    new Customer(){Name = "john", Age = 25}
};
string query = @"Select * from customers";
List<Tuple> tuples = EntityDB.query(customers, query);
Console.Writeline(tuples[0][0]); //prints "joe"

この機能を使用して満たす必要があるいくつかの要件がありますが、

  • このリストから特定の行を抽出する必要があり、フィルタリングが事前定義されていないため、動的 SQL クエリ (文字列クエリ) をサポートする必要があります。(linqはここでは役に立ちません)
  • SQLとまったく同じように、複数の行(平均、カウントなど)で機能をサポートできる必要があります。
  • SQLとまったく同じように指定された列の抽出をサポートする必要があります(列1、列2を選択...)

私は SQL サーバーを持っていません。追加の mdf DB も持っていません。顧客のオブジェクトのこのリストだけです。それを行う方法はありますか?

これに対する私の動機は、このリストから特定の情報を 2D テーブルに抽出し、それを Excel に出力する機能ですが、行と列のフィルタリングは事前定義されておらず、複数行の操作が必要であり、ユーザーは正確な情報を指定できます。 SQLクエリのように抽出したい情報。

4

4 に答える 4

4

LINQ を使用すると、データベース、XML ファイル、アプリケーション オブジェクトなど、さまざまなデータ ソースに対してクエリのようなコマンドを実行できます。LINQ を使用してリストからアイテムを非常に簡単に選択できます。

items.Select(c => c.Customer)

これがメモリ内オブジェクトに対して行われる場合、LINQ-to-Objects を使用しています。

私は、SQL からオブジェクトへのフレームワークを作成するよりも、これを好みます。それは本当のメンテナンスの悪夢のように聞こえます。

于 2012-08-25T22:20:23.753 に答える
1

文字列を作成するのと同じ方法でLinqを作成することを検討しましたか?

何かのようなもの

var customers = new List<Customer> { … };
IQueryable<Customer> results = customers.AsQueryable();


if(!string.IsNullOrEmpty(CustomerName))
    results = results.Where(x => x.Name = CustomerName);

if(CustomerMaxAge != 0)
    results = results.Where(x => x.Age <= CustomerMaxAge);

//etc....

return results.ToList();

を使用するIQueryableと、基準の追加が完了するまでメモリ内のものを延期できます。

于 2012-08-25T23:21:37.470 に答える
1

コードでデータベースをシミュレートしようとするのではなく、軽量のデータベースを使用して問題を解決することを検討しましたか? SQLite のようなものが思い浮かびます。通常はファイルをディスクに書き込みますが、実際にはメモリ内へのロードもサポートしています。

ドキュメントによると、インメモリ SQLite データベースはファイルをディスクに書き込む必要はなく、接続が開いている間はメモリ内に存在します。接続が閉じられると、存在しなくなります。

http://www.sqlite.org/inmemorydb.html

接続が開いたら、通常の SQL 文字列を使用して他のデータベースとまったく同じようにデータをクエリできます。または、必要に応じて、NHibernate またはその他のサポートされている ORM で LINQ を使用してクエリを実行することもできます。

SQLite は、完全なデータベース サーバーをセットアップするオーバーヘッドがなくても、SQL の機能が必要な場合に特に設計されています。実際、ブラウザとして Firefox を使用している場合は、現在 SQLite を使用しています ;)

于 2012-08-26T11:08:33.437 に答える
0

多分これはあなたが望むものですか?

 List<Tuple<string,int>> tuples = customers.Select(x => Tuple.Create(x.Name,x.Age)).ToList();
于 2012-08-25T22:39:29.900 に答える