2

XMLもともとデータ ソースとして使用していたプロジェクトがあります。System.Data.SQLite現在、SQLite ( ) データ ソースを使用するようにコードをリファクタリングしています。SQL クエリの生成方法を示す多くの例を見つけましたが、LINQ の方が使い慣れているため、LINQ を使用したいと思います。

私は元々、LINQ 式で LINQpad を使用して、LINQ to Objects クエリをテストしていました。LINQpad 内で、データベースへの接続と基本的なモデル情報を作成しました。次に、次のようにデータベースにクエリを実行しました。

var site = (from s in siteinfo
            where s.site_name == "some name"
            select new Site
            {
              ID = s.id,
              State = s.state,
              City = s.city,
              ...
            }
           );

LINQpad クエリはデータベース内のテーブルと列を認識し、目的のオブジェクトを生成できます。

VS 2010 Express に移行して、System.Data.SQLiteとのSystem.Data.SQLite.Linq参照を追加しました。次に、データ ソース ペイン内で自分のデータベースへの接続を追加しました。これconnectionStringにはファイルに含まれていapp.configます。

質問: この接続は、データセット (現在のアプローチ) またはエンティティ データ モデルとしてプロジェクトに追加する必要がありますか? 私は両方を試しましたが、どちらも以下の質問には答えません。

上記の LINQpad クエリを VS を使用して再作成しようとすると、インテリセンスで特定のテーブルを選択するオプションが表示されません。代わりにsitedata.siteinfoDataTable、他のテーブルのオプションと同様のオプションがあります。例えば:

var site = (from s in sitedataset.siteinfoDataTable
            where s.site_name == "some name"
            select new Site
            {
              ID = s.id,
              State = s.state,
              City = s.city,
              ...
            }
           );

sitedataset.siteinfoDataTable参照で次のエラーが発生します。

Could not find an implementation of the query pattern for source type 'sitedataset.siteinfoDataTable'. 'Where' not found. Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?

My project does reference the Core.dll and I have a using directive for System.Linq.

I also tried to query the distinct states from the dataset. For example:

var states = (from s in sitedataset.siteinfoDataTable
              select s.state).Distinct();

The select statement produces the following error:

Cannot convert lambda expression to type 'string' because it is not a delegate type

Question: Using VS, how do I write a LINQ query against a SQLite database? How is that database schema recognized within VS?

Any help is appreciated, thanks!

4

0 に答える 0