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!